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

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  JS et PHP, round 2

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

JS et PHP, round 2

n°1929926
t'inquete
Tapis à GOGO
Posté le 07-10-2009 à 18:45:53  profilanswer
 

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
mood
Publicité
Posté le 07-10-2009 à 18:45:53  profilanswer
 

n°1929947
gugus
Posté le 07-10-2009 à 19:50:18  profilanswer
 

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
n°1929969
t'inquete
Tapis à GOGO
Posté le 07-10-2009 à 20:50:08  profilanswer
 

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
n°1929980
t'inquete
Tapis à GOGO
Posté le 07-10-2009 à 21:34:40  profilanswer
 

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
n°1930019
d@kn1ko
Posté le 07-10-2009 à 22:57:25  profilanswer
 

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
n°1930021
SICKofitAL​L
misanthrope
Posté le 07-10-2009 à 23:00:07  profilanswer
 

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...
n°1930029
t'inquete
Tapis à GOGO
Posté le 08-10-2009 à 00:03:38  profilanswer
 

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 ?
 

n°1930031
SICKofitAL​L
misanthrope
Posté le 08-10-2009 à 00:14:53  profilanswer
 

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...
n°1930130
d@kn1ko
Posté le 08-10-2009 à 10:51:53  profilanswer
 

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
n°1930156
SICKofitAL​L
misanthrope
Posté le 08-10-2009 à 11:28:06  profilanswer
 

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...
mood
Publicité
Posté le 08-10-2009 à 11:28:06  profilanswer
 

n°1930275
t'inquete
Tapis à GOGO
Posté le 08-10-2009 à 16:00:06  profilanswer
 

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
n°1930325
SICKofitAL​L
misanthrope
Posté le 08-10-2009 à 17:04:08  profilanswer
 

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...
n°1930346
t'inquete
Tapis à GOGO
Posté le 08-10-2009 à 17:29:10  profilanswer
 

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]

n°1930357
SICKofitAL​L
misanthrope
Posté le 08-10-2009 à 17:51:07  profilanswer
 

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


---------------
We deserve everything that's coming...
n°1930431
t'inquete
Tapis à GOGO
Posté le 08-10-2009 à 20:40:17  profilanswer
 

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

n°1930443
SICKofitAL​L
misanthrope
Posté le 08-10-2009 à 21:18:28  profilanswer
 

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...
n°1930469
t'inquete
Tapis à GOGO
Posté le 08-10-2009 à 22:46:06  profilanswer
 

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

n°1930478
SICKofitAL​L
misanthrope
Posté le 08-10-2009 à 23:50:16  profilanswer
 

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


---------------
We deserve everything that's coming...
n°1949706
tckalexon
Webmaster, Dj & Product
Posté le 12-12-2009 à 01:20:04  profilanswer
 

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

n°1949975
gatsu35
Blablaté par Harko
Posté le 14-12-2009 à 09:36:57  profilanswer
 

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


---------------
Blablaté par Harko
n°1949982
pataluc
Posté le 14-12-2009 à 09:50:29  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  JS et PHP, round 2

 

Sujets relatifs
Clos - Ouvrir un répertoire distant avec PHP et y travaillerDifférents pb PHP/MySQL
Insérer des données dans un fichier PDF avec PHPProblème grosse requête PHP !
[PHP] Problème de validation de schéma XSDApplication cliente ou site PHP optimisé pour PDA
[JS] Problème: ""null":Cannot convert undefined or null to object"Clause WHERE dans PHP
[Js et PHP] Récuperer contenu d'un champs texte sans refresh 
Plus de sujets relatifs à : JS et PHP, round 2


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