Souci pour exécuter fonction ajax au chargement de la page

Souci pour exécuter fonction ajax au chargement de la page - PHP - Programmation

Marsh Posté le 14-11-2015 à 14:32:42    

Bonjour à tous,
 
J'ai un petit souci...
Je commence à me débrouiller avec ajax, mais voici mon problème:
 
J'ai une page php toute simple qui affiche certaines infos; pas de souci jusque là.
En fin de document, j'ai ajouté une simple petite fonction ajax pour qu'un pdf s'enregistre sur le serveur.
Mon problème est que cette fonction ne se lance pas quand j'arrive sur ma page php.
Par contre, quand je rafraîchis cette page php (avec F5 par ex), la fonction se lance très bien!
Pourquoi ne se lance-t-elle pas quand j'arrive sur la page php?
Pourquoi Est-ce que je dois rafraichir cette page pour que la fonction se lance?
 
Au début de ma page php, je récupère la valeur GET que j'ai envoyée.

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>Envoi </title>
  5. <? include("../meta.php" ) ?>
  6. <link rel="stylesheet" type="text/css" href="../styles/global.css" />
  7. </head>
  8. <body>
  9. <?php
  10. include("../connexion.php" );
  11. $id_client = $_GET["id_client"];
  12. ...


 
Vers la fin de ma page php, j'exécute ma fonction ajax.

Code :
  1. ...
  2.     <div id="pdf_tva">
  3.  <script >
  4.  var init = function () {
  5.   // traitement à effectuer au chargement de la page
  6.    //$(document).ready(function(){
  7.     //On génère le formulaire TVA si c'est une TVA 6%  
  8.     var xhr = new XMLHttpRequest();
  9.     xhr.open('GET', 'pdf_tva.php?id_client=<?php echo $id_client; ?>');
  10.     xhr.send('');
  11.    //});
  12.    };
  13.  // on exécute la fonction
  14.  init();
  15.         </script>
  16.     </div>
  17. </div><!-- Fin div container -->
  18. </body>
  19. </html>


 
Merci d'avance pour votre aide
 

Reply

Marsh Posté le 14-11-2015 à 14:32:42   

Reply

Marsh Posté le 15-11-2015 à 12:09:13    

Je mettrais le javascript dans un fichier .js déjà, chargé via une balise <script > dans le <head>. Puis, j'appellerai initi() sur l'événement onload de <body>. Ca serait beaucoup plus propre et mieux structuré :o
 
Rappel : le javascript doit être non intrusif dans le html.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 16-11-2015 à 10:01:11    

Merci beaucoup rufo.
Cela fonctionne.
 
Mais il reste un petit souci.
Quand j'exécute une première fois, aucun problème.
Par contre, quand je reviens en arrière et que je veux relancer la fonction, cela ne fonctionne plus!
Pq? Faut-il attendre un certain temps pour qu'elle puisse se relancer? Il y aura qq en cache qui empêche de la relancer?
 
Comment peut-on contourner ce problème?
 
Merci d'avance

Reply

Marsh Posté le 16-11-2015 à 10:21:42    

La fonction "page précédente" pose souvent problème aux applis web. Il faut que tu la gères du coup dans ton script.
 
Regarde ces solutions :  
http://stackoverflow.com/questions [...] ss-browser
http://stackoverflow.com/questions [...] ery-mobile
http://stackoverflow.com/questions [...] in-browser


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 16-11-2015 à 10:33:14    

Non non. Je me suis mal expliqué.
 
Si je suis sur ma page A, j'ai un lien qui me mène vers ma page B.
C'est quand j'arrive sur cette page B que ma fonction doit se lancer.
 
Le soucis est quand je reviens sur la page A et que je reclique sur mon lien pour arriver sur la page B que la fonction ne se lance plus.
 
PS: la fonction créée une page pdf et l'enregistre sur le serveur (avec html2pdf)
 
une idée?
 
En effet, je ne sais pas si le problème vient de la fonction ajax ou de la création du pdf (mais j'en doute pour cette 2ème idée)

Reply

Marsh Posté le 16-11-2015 à 10:39:16    

Je pense que c'est parce que ta page php a été mise en cache et du coup, le traitement est pas relancé côté serveur...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 16-11-2015 à 10:45:04    

Ok. Et il y a moyen de vider automatiquement ce cache pour contourner le problème?
 
Ici, c'est en cache côté serveur c'est bien ça?

Reply

Marsh Posté le 16-11-2015 à 11:39:00    

Moi, sur mes applis web, je mets dans mon fichier Config.php, appelé en tout début de mes pages php, les 2 lignes suivantes :
header('Pragma: no-cache');
header('Cache-Control: no-cache');


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 16-11-2015 à 14:47:45    

Cela ne change rien malheureusement.
Je n'y avais plus touché depuis qq heures.
J'ai ajouté les header directement dans la page puis seulement j'ai testé.
La première fois, ça fonctionne nickel puis plus rien... :(
 
Une autre idée? Le problème viendrait bien du cache alors?

Reply

Marsh Posté le 16-11-2015 à 15:11:54    

Je viens de retester en accédant directement à page ajax et en mettant les données en GET dans l'url.
Aucun problème, je peux lui envoyer plein de fois, le traitement se fait à chaque fois.
C'est donc ma fonction init() dans le body onload qui n'est pas lancée à chaque fois.
 
Actuellement j'ai donc ma page A avec:
en tout premier dans ma page:

Code :
  1. header('Pragma: no-cache');
  2. header('Cache-Control: no-cache');


Dans le head:

Code :
  1. <script src="pdf_tva_ajax.js" type="text/javascript" language="JavaScript"></script>


Le body onload:

Code :
  1. <body onload="init(<?php echo $_GET["id_client"]; ?> );">


Séparément j'ai ma page pdf_tva_ajax.js:

Code :
  1. function init(idclient) {
  2. var xhr = new XMLHttpRequest();
  3. xhr.open('GET', 'pdf_tva.php?id_client=idclient');
  4. xhr.send('');
  5. };


 
Il y aurait une erreur là-dedans?
 
Merci encore

Reply

Marsh Posté le 16-11-2015 à 15:11:54   

Reply

Marsh Posté le 18-11-2015 à 23:15:53    

bingojm a écrit :

Je viens de retester en accédant directement à page ajax et en mettant les données en GET dans l'url.
Aucun problème, je peux lui envoyer plein de fois, le traitement se fait à chaque fois.
C'est donc ma fonction init() dans le body onload qui n'est pas lancée à chaque fois.
 
Actuellement j'ai donc ma page A avec:
en tout premier dans ma page:

Code :
  1. header('Pragma: no-cache');
  2. header('Cache-Control: no-cache');


Dans le head:

Code :
  1. <script src="pdf_tva_ajax.js" type="text/javascript" language="JavaScript"></script>


Le body onload:

Code :
  1. <body onload="init(<?php echo $_GET["id_client"]; ?> );">


Séparément j'ai ma page pdf_tva_ajax.js:

Code :
  1. function init(idclient) {
  2. var xhr = new XMLHttpRequest();
  3. xhr.open('GET', 'pdf_tva.php?id_client=idclient');
  4. xhr.send('');
  5. };


 
Il y aurait une erreur là-dedans?
 
Merci encore


 
ALors perso je ferais :
1) dans ton pdf_tva_ajax.js, j'y rajouterais

Code :
  1. window.onload = init;


 
A priori, tu écris en PHP le lien vers id_client, que tu as déjà dans l'url. En js, tu peux récuperer les parametres d'url avec location.query (il faut un peu parser le tout, mais rien de complexe). C'est plus propre que de mélanger le PHP et le JS (déjà dit plus haut d'ailleurs).
 
2) Je ne sais pas si c'est voulu, mais ton param dans init ne sert à rien puisque il est sous forme de chaine.

Code :
  1. function init(idclient) {
  2. var xhr = new XMLHttpRequest();
  3. xhr.open('GET', 'pdf_tva.php?id_client=idclient'); // ca devrait être 'pdf_tva.php?id_client=' + idclient
  4. xhr.send('');
  5. };


 
D'ailleurs en suivant l'idée plus haut, ca donnerait (avec une fonction trouvée sur StackOverflow pour choper le param de son choix dans l'url) :

Code :
  1. function getParameterByName (name)
  2. {
  3.     name = name.replace (/[\[]/, "\\[" ).replace(/[\]]/, "\\]" );
  4.     var
  5.         regex = new RegExp ("[\\?&]" + name + "=([^&#]*)" ),
  6.         results = regex.exec(location.search);
  7.     return results === null ? "" : decodeURIComponent (results[1].replace (/\+/g, " " ));
  8. }
  9. function init ()
  10. {
  11. var xhr = new XMLHttpRequest ();
  12. xhr.open ('GET', 'pdf_tva.php?id_client=' + getParameterByName ('id_client'), false);
  13. xhr.send (null);
  14. };
  15. window.onload = init;


 
3) Utilise Firebug ou les outils de dev integrés à ton navigateur (F12) pour voir ce qui transite entre ce dernier et ton serveur.
 
Bonne chance :)


Message édité par SICKofitALL le 18-11-2015 à 23:21:28

---------------
We deserve everything that's coming...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed