[AJAX] onreadystatechange non reconnu

onreadystatechange non reconnu [AJAX] - HTML/CSS - Programmation

Marsh Posté le 07-10-2009 à 17:07:36    

Bonjour à tous,
 
j'utilise une fonction qui met à jour une base de données lors de clic sur des boutons.
Voici la fonction appelée

Code :
  1. function ajaxDeco(){
  2. var xhr_object = null;
  3. if(window.XMLHttpRequest){ // Firefox  
  4.  xhr_object = new XMLHttpRequest();
  5. }else if(window.ActiveXObject){ // Internet Explorer  
  6.  xhr_object = new ActiveXObject("Microsoft.XMLHTTP" );
  7. }else { // XMLHttpRequest non supporté par le navigateur  
  8.  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..." );
  9.  return;
  10. }
  11. xhr_object.open("POST","ajaxDeco.php",true);
  12. xhr_object.onreadystatechange = function(){
  13.  //alert("readyState "+xhr_object.readyState);
  14.  if(xhr_object.readyState==4){
  15.   //alert("status "+xhr_object.status);
  16.   if(xhr_object.status==200){
  17.    alert("OK" );
  18.   }
  19.  }
  20. }
  21. xhr_object.send();
  22. }


 
vous l'aurez compris le fichier ajaxDeco.php exécute une requête pour faire la mise à jour de ma base.
moi je n'ai pas de problème avec ces mises à jours par contre cela ne fonctionne pas pour tout le monde.
Et pourtant, j'ai ajouté des alert pour au niveau de la reconnaissance du navigateur et tout à l'air normal.
Lorsque j'active la ligne //alert("readyState "+xhr_object.readyState);
les utilisateurs ayant des problèmes me disent qu'aucune alert ne s'affiche.
 
Savez-vous d'où cela peut provenir ?
du navigateur ?
de mon fichier php ?
d'autre chose ?
 
merci à tous pour votre aide et bonne soirée
Matt

Reply

Marsh Posté le 07-10-2009 à 17:07:36   

Reply

Marsh Posté le 07-10-2009 à 23:06:02    

A moins que tu ne tiennes absolument à garder ton code à toi, pourquoi ne pas utiliser les frameworks qui existent et qui sont éprouvés ?
Regardes par là : http://docs.jquery.com/Ajax
 
Chez toi ca donnerait un truc tout con du style :

Code :
  1. $.ajax ({
  2.   type: "POST",
  3.   url: "ajaxDeco.php",
  4.   success: function (msg) {
  5.     alert ("OK - " + msg);
  6.     return;
  7.   }
  8. });


Message édité par SICKofitALL le 07-10-2009 à 23:08:16

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

Marsh Posté le 08-10-2009 à 06:33:52    

bonjour,
 

Code :
  1. <script type="text/javascript">
  2. function ajaxDeco()
  3. { var xhr_object = null;
  4.  if ( window.XMLHttpRequest )
  5.    { xhr_object = new XMLHttpRequest(); }
  6.  else  { if ( window.ActiveXObject )
  7.       { xhr_object = new ActiveXObject("Microsoft.XMLHTTP" );}
  8.     else  {  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..." );
  9.                         return;
  10.                      }
  11.             }
  12.       xhr_object.open("POST","ajaxDeco.php",true);
  13.       xhr_object.onreadystatechange = function()
  14.       {   if(xhr_object.readyState==4)
  15.          {   if(xhr_object.status==200)
  16.             {   alert(xhr_object.responseText);   }
  17.          }
  18.       }
  19.       xhr_object.send();
  20.    }
  21. ajaxDeco();
  22. </script>

 
ça ira mieux
 
@+
 
ps : @SICKofitALL : 100k pour remplacer quelques lignes en javascript ????

Message cité 1 fois
Message édité par bul_3 le 08-10-2009 à 06:37:11
Reply

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

bul_3 a écrit :

bonjour,
 
ps : @SICKofitALL : 100k pour remplacer quelques lignes en javascript ????


pas 100, 55k en minifié et même 20 une fois gzippé par le serveur, ca reste honnete.
Et vu que ca existe tout fait et que ca  marche bien :)


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

Marsh Posté le 08-10-2009 à 08:38:26    

sauf
que c'est un sur-langage propriétaire à apprendre
que pour maintenir et pour l'avenir, la pérennité [edit]  je craindrais
que la compatibilité multi-navigateurs  et autres
bibliothèques de fonctions n'est pas toujours là
que si on n'utilise que pour ajax ( 10 lignes
maxi en js ), j'ai des doutes sur l'utilité
...
ce n'est que mon avis et ça ne fait pas le moine.
@+

Message cité 2 fois
Message édité par bul_3 le 08-10-2009 à 16:45:02
Reply

Marsh Posté le 08-10-2009 à 16:40:15    

Ton problème ne serait pas lié aux paramètres de sécurité du navigateur ? J'utilise exactement le même code, et je ne me rappelle pas avoir eu de problèmes particuliers chez les clients (qui utilisent le site principalement en intranet, donc avec une sécurité un peu moins paranoïaque).
 
Sinon, ça fait un paquet de fois que je vois ce code pour gérer les requètes XmlHttpRequest: une closure d'une variable locale dans une fonction annonyme. Je ne sais pas si c'est ton cas, mais après avoir fait plusieurs bench, ce système cause un memory leak MASSIF dans Internet Explorer 7 et 8, chez moi et chez beaucoup d'autres clients (à vu de nez, c'est une centaine de Ko par requète).
 
Le fix :

Code :
  1. function ajaxDeco()
  2. {
  3. var xhr_object = null;
  4. if(window.XMLHttpRequest){ // Firefox  
  5. xhr_object = new XMLHttpRequest();
  6. }else if(window.ActiveXObject){ // Internet Explorer  
  7. xhr_object = new ActiveXObject("Microsoft.XMLHTTP" );
  8. }else { // XMLHttpRequest non supporté par le navigateur  
  9. alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..." );
  10. return;
  11. }
  12. xhr_object.open("POST","ajaxDeco.php",true);
  13. xhr_object.onreadystatechange = function(){
  14. //alert("readyState "+xhr_object.readyState);
  15. if(xhr_object.readyState==4){
  16.  //alert("status "+xhr_object.status);
  17.  if(xhr_object.status==200){
  18.    alert("OK" );
  19.    delete xhr_object.onreadystatechange
  20.  }
  21. }
  22. }
  23. xhr_object.send();
  24. }


 
Ça brise la référence circulaire entre xhr_objet et la fonction annonyme.


Message édité par tpierron le 08-10-2009 à 16:43:41
Reply

Marsh Posté le 08-10-2009 à 16:44:20    

non, non,
c'était un souci de { } mal placé.
tel que j'ai mis : ça baigne.
@+

Reply

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

bul_3 a écrit :

non, non,
c'était un souci de { } mal placé.
tel que j'ai mis : ça baigne.
@+


 [:robert de niro] Ha, euh, faut dire que le code n'est pas super bien indenté, j'ai un peu de mal à voir la différence entre les deux versions. Cela dit, j'ai fait un copier/coller du code original dans une page de test et ça_marche_chez_moi™ (enfin, si on exclu le memory leak).

Reply

Marsh Posté le 09-10-2009 à 00:56:05    

bul_3 a écrit :

sauf
que c'est un sur-langage propriétaire à apprendre
que pour maintenir et pour l'avenir, la pérennité [edit]  je craindrais
que la compatibilité multi-navigateurs  et autres  
bibliothèques de fonctions n'est pas toujours là
que si on n'utilise que pour ajax ( 10 lignes
maxi en js ), j'ai des doutes sur l'utilité
...
ce n'est que mon avis et ça ne fait pas le moine.
@+


 
Ho oui super \o/
Je réagissais comme toi avant, j'ai tout codé mes propres truc, même des micros bibliothèques d'animation. Mais force est de constater que tu gagnes un temps considérable à développer en utilisant une vrai librairie telle que mootools (jquery à part car c'est pas une lib faite pour de vraies applications très orientées OO en JS).
Il y a beaucoup d'avantages à utiliser une libraire, tel que le gain de temps et surtout la simplicité de codage et l'utilisations d'effets déjà tout prêts sans avoir à se casser la tête. Mais derrière comme tu le dis, on est dépendant de la librairie et de son évolution. Si la librairie n'évolue plus, tu auras du mal à trouver des "trucs" tous fait qui utilisent la version de ta lib.
 
Le mieux étant d'avoir une "interface" donc les fonctions sont appelées par les objets que tu as codé, et derrière tu n'as juste qu'à plugger n'importe quelle autre librairie


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

Marsh Posté le 09-10-2009 à 09:43:46    

bul_3 a écrit :

sauf
que c'est un sur-langage propriétaire à apprendre
C'est du javascript. C'est pas un sur-langage comme tu dis, c'est une librairie. Si maintenant, les développeurs ne veulent même plus apprendre de nouvelles librairies en fonction de leurs besoins, où va-t'on !?
 
que pour maintenir  
Hein ??
 
et pour l'avenir, la pérennité  
Des librairies comme mootools ou jquery sont maintenant très utilisée. Elles ne vont pas être obsolètes en l'espaces de quelques mois à peine.
 
[edit]  je craindrais
que la compatibilité multi-navigateurs  
justement, ce type de librairie a pour fonction première d'affranchir l'utilisateur de ça en étant compatible avec un nombre important de navigateurs.
 
et autres  
bibliothèques de fonctions n'est pas toujours là
que si on n'utilise que pour ajax ( 10 lignes
maxi en js ), j'ai des doutes sur l'utilité
...
Il existe des lib super petites pour ce genre de besoin. Et les plus grosses librairies ont des mécanismes permettant de ne charger que ce qui est nécessaire.
 
ce n'est que mon avis et ça ne fait pas le moine.
@+


Tu devrais essayer de t'intéresser à ces librairies. Elles permettent vraiment de se faciliter la vie, et de faire des trucs très facilement qui serait assez complexe en temps normal.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Sujets relatifs:

Leave a Replay

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