Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
943 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2269684
bingojm
Posté le 14-11-2015 à 14:32:42  profilanswer
 

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
 

mood
Publicité
Posté le 14-11-2015 à 14:32:42  profilanswer
 

n°2269697
rufo
Pas me confondre avec Lycos!
Posté le 15-11-2015 à 12:09:13  profilanswer
 

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
n°2269724
bingojm
Posté le 16-11-2015 à 10:01:11  profilanswer
 

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

n°2269725
rufo
Pas me confondre avec Lycos!
Posté le 16-11-2015 à 10:21:42  profilanswer
 

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
n°2269727
bingojm
Posté le 16-11-2015 à 10:33:14  profilanswer
 

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)

n°2269728
rufo
Pas me confondre avec Lycos!
Posté le 16-11-2015 à 10:39:16  profilanswer
 

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
n°2269730
bingojm
Posté le 16-11-2015 à 10:45:04  profilanswer
 

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?

n°2269740
rufo
Pas me confondre avec Lycos!
Posté le 16-11-2015 à 11:39:00  profilanswer
 

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
n°2269752
bingojm
Posté le 16-11-2015 à 14:47:45  profilanswer
 

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?

n°2269754
bingojm
Posté le 16-11-2015 à 15:11:54  profilanswer
 

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

mood
Publicité
Posté le 16-11-2015 à 15:11:54  profilanswer
 

n°2269932
SICKofitAL​L
misanthrope
Posté le 18-11-2015 à 23:15:53  profilanswer
 

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...

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[Résolu] Rechercher une valeur dans une pageenvois page html
[JQUERY]Problème requête ajax en GET via PHP[ASP] Terniner une page avec un code retour précis
Fonction et procedure[Résolu][WebServices&Ajax]problème de connexion juste avec ajax
Copie de fichiers vers dossiers en fonction du nom de fichier[D3.JS] Fonction d3.layout.stack
fonction Si imbrique exelptite question php-AJAX
Plus de sujets relatifs à : Souci pour exécuter fonction ajax au chargement de la page


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR