JS et PHP, round 2

JS et PHP, round 2 - HTML/CSS - Programmation

Marsh Posté le 07-10-2009 à 18:45:53    

Bonsoir la foule.
 
Après avoir trouvé une solution à mon 1er pb ( mise a jour d'un champs sans refresh, j'ai laissé tombé le truc :whistle:  ) en voici un 2eme qui se pose.
J'ai un compte à rebours en JS. Lorsqu'il arrive à 0 un script php doit s'executer.
 
Voici un bout du script JS qui m'interesse :
 
function formatresults2(){
if (this.timesup==false){  
bla bla bla
}
else{  
var displaystring="Le compte à rebours est terminé" t
 
}
return displaystring
}
 
Le fameux script doit s'executer dans le else. J'ai trouvé un truc : c'est de mettre : window.open('script.php');
 
C'est génial, le script est executé, mais :
 
1) Ca ouvre une popup et donc bloqué a 99% du temps
2) Si je recharge la page, on revient au 1)
 
J'ai essayé de comprendre l'ajax, je n'y arrive pas, vu que je connais strictement rien en JS :sweat:  
 
Y'a t-il une solution plus élégante ?
 
Merci  [:deouss]

Message cité 1 fois
Message édité par t'inquete le 07-10-2009 à 20:52:34
Reply

Marsh Posté le 07-10-2009 à 18:45:53   

Reply

Marsh Posté le 07-10-2009 à 19:50:18    

essayes un framework js (jquery, mootools etc...), ça fera usine à gaz dans ton cas vu que ça servira que pour ça mais bon ça reste un peu plus simple pour faire une requête en ajax.

 

sinon mieux, apprends à utiliser XMLHttpRequest (donc AJAX), c'est pas forcement évident mais avec un tuto c'est pas non plus le bout du monde :o

 

edit : et j'avais pas vu mais la cat est foireuse, c'est pas du java ton truc :o
javascript n'a rien à voir avec java, ton post est a mettre là : HTML/CSS/Javascript


Message édité par gugus le 07-10-2009 à 19:51:41

---------------
Site photo - FlickR - G+ - Fb
Reply

Marsh Posté le 07-10-2009 à 20:50:08    

Ah ouais, je me suis gourré de rubrique  [:hahaguy]. Je l'ai modifiée

 

Sinon j'a regardé le XHR, je vois pas où (pas la non ) je pourrais coller ma requete php en fait.
Puis il faut pas réécrire le script JS par la même occasion ?


Message édité par t'inquete le 07-10-2009 à 20:52:55
Reply

Marsh Posté le 07-10-2009 à 21:34:40    

J'ai regardé les exemples sur le forum des gens qui ont posté leurs problemes :

 

Est ce que c'est comme ca que l'on fait ; mettre dans le else :

 

else{  
var displaystring="Le compte à rebours est terminé" t
 

 


 function getXhr(){
                                 var xhr = null;
    if(window.XMLHttpRequest) // Firefox et autres
    xhr = new XMLHttpRequest();
    else if(window.ActiveXObject){ // Internet Explorer  
    try {
    xhr = new ActiveXObject("Msxml2.XMLHTTP" );
   } catch (e) {
    xhr = new ActiveXObject("Microsoft.XMLHTTP" );
    }
 }
   else { // XMLHttpRequest non supporté par le navigateur  
    alert("Votre navigateur ne supporte pas les objets HMLHTTPRequest..." );
  xhr = false;
   }
          return xhr;
  }
}

 


 var xhr = getXhr();
    // On défini ce qu'on va faire quand on aura la réponse
   xhr.onreadystatechange = function(){
    // On ne fait quelque chose que si on a tout reçu et que le serveur est ok

 

xhr.open("POST","script.php",true);

 


C'est mon premier script ajax [:max evans]


Message édité par t'inquete le 07-10-2009 à 21:43:41
Reply

Marsh Posté le 07-10-2009 à 22:57:25    

mon premier script ajax qui date de quelques mois :
 

Code :
  1. function get_Xhr()
  2. {
  3.   var xmlHTTP;
  4.   try{xmlHTTP = new XMLHttpRequest();}
  5.   catch(e) {
  6.     try{xmlHTTP = new ActiveXObject("Msxml2.XMLHTTP" );}
  7.     catch(e) {
  8.       try{xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP" );}
  9.       catch(e) {
  10.         alert("Your browser does not support AJAX!" );
  11.         return false;
  12.       }
  13.     }
  14.   }
  15.   return xmlHTTP;
  16. }
  17. function ajaxclient()
  18. {
  19.    var xhr = get_Xhr();
  20.    xhr.onreadystatechange = function()
  21.     {
  22.      if(xhr.readyState == 4 && xhr.status == 200)
  23.       {
  24.       //succé
  25.       document.getElementById('test_coclico').innerHTML = xhr.responseText;
  26. }
  27. }
  28. xhr.open("POST",'ajax/ajax_test_coclico.php',true);
  29. xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  30. xhr.send("coclico="+document.form_coclico.coclico.value+"&campagne="+document.form_coclico.campagne.value);
  31. }


 
ici je passe deux paramètres : coclico et campagne vers la page ajax_test_coclico.php par la methode POST.
le contenu de id test_coclico sera "changé" une fois la requête exécuté grâce à la ligne 25
 
le fichier php ajax_test_coclico.php. ce fichier n'affiche rien il ne fait que des traitements.
 

Code :
  1. <?php
  2. $coclico=$_POST["coclico"];
  3. $campagne=$_POST["campagne"];
  4. require("connexion.php" );
  5. tu peut mettre des requetes ici
  6. if(....)
  7. {
  8. echo ce que tu veux afficher dans l'id test_coclico
  9. }
  10. else
  11. {
  12. echo ce que tu veux afficher dans l'id test_coclico
  13. }
  14. ?>


 
onKeyup="ajaxclient()"


Message édité par d@kn1ko le 07-10-2009 à 22:59:45
Reply

Marsh Posté le 07-10-2009 à 23:00:07    

t'inquete a écrit :

Bonsoir la foule.
 
Après avoir trouvé une solution à mon 1er pb ( mise a jour d'un champs sans refresh, j'ai laissé tombé le truc :whistle:  ) en voici un 2eme qui se pose.
J'ai un compte à rebours en JS. Lorsqu'il arrive à 0 un script php doit s'executer.
 
Voici un bout du script JS qui m'interesse :
 
function formatresults2(){
if (this.timesup==false){  
bla bla bla
}
else{  
var displaystring="Le compte à rebours est terminé" t
 
}
return displaystring
}
 
Le fameux script doit s'executer dans le else. J'ai trouvé un truc : c'est de mettre : window.open('script.php');
 
C'est génial, le script est executé, mais :
 
1) Ca ouvre une popup et donc bloqué a 99% du temps
2) Si je recharge la page, on revient au 1)
 
J'ai essayé de comprendre l'ajax, je n'y arrive pas, vu que je connais strictement rien en JS :sweat:  
 
Y'a t-il une solution plus élégante ?
 
Merci  [:deouss]


 
Te compliques pas la vie à réinventer la poudre, comme dit : prends un framework (jQuery ou autre)
 
Ton script PHP, il doit faire quoi exactement ? Il doit afficher qqch sur le client ?


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

Marsh Posté le 08-10-2009 à 00:03:38    

Ce n'est que du traitement, aucune variable à faire passer. Juste des mises à jour des tables.
 
@Darknico.
 
Mon fichier script.php il a la même gueule que le tien, mais  je ne me trimballe pas les variables.
 
Dans mon script JS qui fait le compte a rebours, c'est lorsqu'il arrive à 0 que je dois traiter le script.php.  
 
Tout est automatisé, l'humain n'intervient pas. Donc du coup je ne devrais pas utiliser les onKeyup et companie si ?
 

Reply

Marsh Posté le 08-10-2009 à 00:14:53    

Ok alors regardes de ce coté là : http://docs.jquery.com/Ajax
 
un truc comma ca à la fin de ton timer devrait le faire (en utilisant jQuery, qui n'est qu'un simple fichier JS à inclure ;) ):

Code :
  1. $.ajax ({ url: "script.php" });


 
Easy non ? :)


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

Marsh Posté le 08-10-2009 à 10:51:53    

t'inquete a écrit :

Ce n'est que du traitement, aucune variable à faire passer. Juste des mises à jour des tables.
 
@Darknico.
 
Mon fichier script.php il a la même gueule que le tien, mais  je ne me trimballe pas les variables.
 
Dans mon script JS qui fait le compte a rebours, c'est lorsqu'il arrive à 0 que je dois traiter le script.php.  
 
Tout est automatisé, l'humain n'intervient pas. Donc du coup je ne devrais pas utiliser les onKeyup et companie si ?
 


 
non pas besoin d'événement a ce moment la.
 
pour suivre SICKofitALL
 
peut etre un truc du genre (pas testé je ne sais pas si c correcte)

Code :
  1. $(function(){
  2. eval(setTimeout($.ajax ({ url: "script.php" });,3000))
  3. });

Message cité 1 fois
Message édité par d@kn1ko le 08-10-2009 à 10:52:17
Reply

Marsh Posté le 08-10-2009 à 11:28:06    

d@kn1ko a écrit :


 
non pas besoin d'événement a ce moment la.
 
pour suivre SICKofitALL
 
peut etre un truc du genre (pas testé je ne sais pas si c correcte)

Code :
  1. $(function(){
  2. eval(setTimeout($.ajax ({ url: "script.php" });,3000))
  3. });



 
non je pense pas que ca soit correct.
On est d'accord que tu veux que au bout d'un certain laps de temps, ton script PHP soit executé via Ajax pas vrai ?
 
Alors :

Code :
  1. var timer = setTimeout (function ()
  2. {
  3.  // tu peux rajouter ici une condition qui empechera l'execution du script si par exemple l'user a réalisé l'action dans le temps imparti
  4.  // genre : if (!action_is_done) ... etc
  5.  $.ajax ({ url: "script.php" });
  6.  return;
  7. }, 3000);
  8.  
  9. ...
  10.  
  11. // empecher l'execution si l'action est faite
  12. if (action_is_done)
  13. {
  14.  clearTimeout (timer);
  15. }


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

Marsh Posté le 08-10-2009 à 11:28:06   

Reply

Marsh Posté le 08-10-2009 à 16:00:06    

SICKofitALL a écrit :

Ok alors regardes de ce coté là : http://docs.jquery.com/Ajax

 

un truc comma ca à la fin de ton timer devrait le faire (en utilisant jQuery, qui n'est qu'un simple fichier JS à inclure ;) ):

Code :
  1. $.ajax ({ url: "script.php" });
 

Easy non ? :)

 

J'ai mis cette ligne dans le ELSE du script, mais lors de l'execution, j'ai une erreur comme quoi le $ est indefini.

 

Je dois le définir où ?  [:tinostar dei]


Message édité par t'inquete le 08-10-2009 à 16:00:27
Reply

Marsh Posté le 08-10-2009 à 17:04:08    

Tu as bien intégré le framwork jQuery dans ton code pas vrai ? ;)
 
Si tu as accès au net à partir de ton appli, tu peux faire comme ca (à mettre dans le HEAD de ton fichier html) :

Code :
  1. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>


 
Soit tu DL le framework et tu l'inclus à partir de ton serveur directement.


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

Marsh Posté le 08-10-2009 à 17:29:10    

J'ai mal intégré le framework  :pfff:  
Ca fonctionne presque :  
 
La page qui accueille le compte a rebours doit être rafraichie pour que la requête script.php se lance.
 
J'ai mis un window.location.reload(true); mais ca rafraichit toutes les secondes   [:deouss]

Reply

Marsh Posté le 08-10-2009 à 17:51:07    

tu peux me filer ton code complet ou un lien vers qqch où je pourrais creuser ?


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

Marsh Posté le 08-10-2009 à 20:40:17    

Donc le truc se présente comme ca : count.js qui comporte le script du compte a rebours, et ma page php qui recoit le tout.
Voici ce qui m'interesse ; c'est à dire l'endroit du script ou on peut tout mettre lorsque le CaR est à 0 :
 
 
count.js :
 
 

Code :
  1. //2) Display countdown with a stylish LCD look, and display an alert on target date/time
  2. function formatresults2(){
  3. if (this.timesup==false){ //if target date/time not yet met
  4. var displaystring="<span class='lcdstyle'>"+arguments[0]+" <sup>J</sup> "+arguments[1]+" <sup>h</sup> "+arguments[2]+" <sup>min</sup> "+arguments[3]+" <sup>sec</sup></span>"
  5. }
  6. else{ //else if target date/time met
  7. var displaystring="c'est fini !" //Don't display any text
  8. }
  9. return displaystring
  10. }


 
page.php :
 

Code :
  1. <script type="text/javascript">
  2. var launchdate'; print $i; echo'=new cdLocalTime("cdcontainer'; print $i; echo'", "server-php", 0, "'; print $d_fin_compteur; echo' ';  print $h_fin_compteur; echo'" )
  3. launchdate'; print $i; echo'.displaycountdown("days", formatresults2)
  4. </script>


 
 
Dans le else du count.js, j'ai mis :
 

Code :
  1. var ajax = $.ajax ({ url: "control.php" });//alert("Launch time!" ) //Instead, perform a custom alert


 
et dans return, j'ai placé un refresh.
 
le control.php possede mes requetes sql.
 
 
En fait, c'est normal qu'il me refresh toutes les secondes, puisqu'il compare chaque seconde les variables et utilise telle ou telle fonction suivant le résultat.
 
Si je ne mets pas de refresh, je dois refresh manuellement ma page.php
 
Merci pour ton aide

Reply

Marsh Posté le 08-10-2009 à 21:18:28    

Alors premiere chose, dans ton page.php si je comprends bien tu généres du code JS à partir du PHP ? C'est une tres mauvaise idée ! :/
 
N'oublies pas que le PHP ca se passe du coté serveur et le JS du coté client, prendre le premier pour bidouiller le second c'est la prise de tête assurée, sans parler du code à maintenir (et à débugger) [:spamafote]
 
Dans ce genre de cas, et si tu as vraiment besoin de récuperer des infos coté serveur pour générer ton CaR, il vaudrait mieux je pense faire un appel ajax pour choper les infos dont tu as besoin, et les utiliser en JS pur.
 
Pour info aussi, lorsque tu récuperes sur le serveur du HTML, qui en fait contient une balise <script>, celle-ci n'est pas executée (ignorée en fait) du coté client. Il faut alors utiliser $.getScript pour faire ce taf là.
 
Ca m'a l'air bien complexe en fait. Utilises-tu qqch comme fireBug pour gérer ton code JS (et voir ce qui transite entre le client et le serveur) ?


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

Marsh Posté le 08-10-2009 à 22:46:06    

Bah je fais un echo du script JS, en integrant des variables récupérées en amont. Ces variables la, je les print dans le script JS.
 
C'est vrai que c'est de la bidouille du JS, mais je ne sais faire autrement, et vu que ca fonctionne sans planter je le laisse tel quel.
 
Firebug, je ne connais pas. De toute facon, je vois avec le résultat si tout se passe bien. En fait, si les variables passent, le compte a rebours fonctionne normalement. Si elles ne passent pas. Il bug. Voila le test :D

Reply

Marsh Posté le 08-10-2009 à 23:50:16    

Jetes un oeil alors : https://addons.mozilla.org/fr/firefox/addon/1843


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

Marsh Posté le 12-12-2009 à 01:20:04    

je ve apprendre le JS (javascript) ajax et tous vas dans se site (en_us)
va dans se site: http://www.w3schools.com/
 
il y a vraiment tous...

Reply

Marsh Posté le 14-12-2009 à 09:36:57    

ho punaise, please please please corrige ton auretograf :'(


---------------
Blablaté par Harko
Reply

Marsh Posté le 14-12-2009 à 09:50:29    

gatsu35 a écrit :

ho punaise, please please please corrige ton auretograf :'(


c'est que son 4ème post il pouvait pas savoir...  :D  en plus il a réussi la très belle perf de 4 déterrages sur 4 posts...  [:implosion du tibia]


Message édité par pataluc le 14-12-2009 à 09:52:01
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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