XMLHttpRequest qui fout le bordel

XMLHttpRequest qui fout le bordel - HTML/CSS - Programmation

Marsh Posté le 05-06-2006 à 17:38:58    

Salut,
 
Je voulais m'initier un peu à l'ajax toussa, mais ça se passe pas comme prévu...
Voila mon code :

Code :
  1. function getHTTPObject()
  2. {
  3.    var xmlhttp = false;
  4.    if(document.all)
  5.    {
  6.       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP" ) ;
  7.    }
  8.    else
  9.    {
  10.       xmlhttp = new XMLHttpRequest();
  11.    }
  12.    if (xmlhttp)
  13.    {
  14.       xmlhttp.onreadystatechange=function()
  15.       {
  16.          if (xmlhttp.readyState == 4) /* 4 : état "complete" */
  17.          {
  18.             alert(xmlhttp.readyState);
  19.             if (xmlhttp.status == 200) /* 200 : code HTTP pour OK */
  20.             {
  21.                alert (xmlhttp.responseText);
  22.                //response = xmlhttp.responseXML.documentElement;
  23.                     .... ( traitement appel de SpUpdate(response) )
  24.             }
  25.          }
  26.        }
  27.     }
  28.     return xmlhttp;
  29. }


 
Ca c'est la fonction qui est appelé par mon formulaire (onSubmit="SpUpdate('')" ) et qui servira aussi de fonction de traitement pour le retour

Code :
  1. function SpUpdate(response)
  2. {
  3. //Receive data
  4. if (response!='')
  5. {
  6. }
  7. //Send data
  8. else
  9. {
  10.  var xmlhttp = getHTTPObject();
  11.  if (!xmlhttp)
  12.  {
  13.   return true;
  14.  }
  15.  xmlhttp.open("POST", "aj.php",true);
  16.  xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  17.  var query= 'spDate='+document.getElementById('spDate').value;
  18.  if (document.getElementById('spType').checked)
  19.  {
  20.   query = query +'&spType=2';
  21.  }
  22.  xmlhttp.send(query);
  23.  return false;
  24. }
  25. }


 
Ca c'est ce que renvoie aj.php

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
  2. <response>
  3.    <method>SpUpdate</method>
  4.              <data>.....</data>
  5. </response>


 
 
Les problèmes :

  • Sous IE:  

(1) J'ouvre une nouvelle page, je clique sur le submit de mon form, ca m'alerte bien le xmlhttp.readyState =4, puis ça m'alerte parfaitement le contenu de la réponse. Par contre, le formulaire est quand même envoyé par l'action du formulaire, malgré le return false à la fin...
(2) Ensuite, si je reclique sur mon submit, pas d'alertes, rien, ca passe directement par l'action du formulaire....Par contre, si j'ouvre une nouvelle page, ca remarche et je peux recommencer le (1)....
 

  • Sous FF:  

Ca m'affice le 4 du readyState, mais rien d'autre. Le formulaire est envoyé par l'action du form, mais contrairement à IE, je peux recliquer sur le formulaire et ca recommence le cycle. Par contre, la console JS me renvoie ça:
[quote]
Error: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: http://localhost/home/modules/aj_scripts.js :: anonymous :: line 23"  data: no]
Source File: http://localhost/home/modules/aj_scripts.js
Line: 23
[quote]
La ligne 23 correspond au if (xmlhttp.status == 200)....
 
Je comprend pas.... :pt1cable:  
Donc si quelqu'un a une idée, je suis preneur. Merci :)

Message cité 1 fois
Message édité par gooopil le 05-06-2006 à 17:46:27
Reply

Marsh Posté le 05-06-2006 à 17:38:58   

Reply

Marsh Posté le 05-06-2006 à 17:55:28    

Reply

Marsh Posté le 05-06-2006 à 17:59:29    


 
Sympa mais des tutos ajax j'en ai c'est pas le problème...

Reply

Marsh Posté le 05-06-2006 à 18:02:38    

Tu veux absolument une méthode asynchrone?

Reply

Marsh Posté le 05-06-2006 à 18:06:03    

ledzep2 a écrit :

Tu veux absolument une méthode asynchrone?


Oui, je veux pas de bloquant...Sinon, tu files des tutos que tu connais pas ou que tu suis pas ? Je viens de voir que dans ton lien, l'article incite à "proscrire" les transmissions synchrones  :o

Reply

Marsh Posté le 05-06-2006 à 18:13:08    

Oui mais bon c'est plus simple et ça fonctionne bien pour ce que je fais moi!
Ma question était plus au niveau de la nécessité d'utiliser telle ou telle méthode.
 
Pr ma part :
#
 xmlhttp.onreadystatechange=function()
#
     {
c'est ça qui foutait le wouaie...dc ça a sauté...et dc du coup synchrone...
Peux pas faire plus désolé...

Reply

Marsh Posté le 05-06-2006 à 18:39:37    

gooopil a écrit :


Les problèmes :

  • Sous IE:  

(1) J'ouvre une nouvelle page, je clique sur le submit de mon form, ca m'alerte bien le xmlhttp.readyState =4, puis ça m'alerte parfaitement le contenu de la réponse. Par contre, le formulaire est quand même envoyé par l'action du formulaire, malgré le return false à la fin...


Code :
  1. onSubmit="return SpUpdate('')"


 

gooopil a écrit :

(2) Ensuite, si je reclique sur mon submit, pas d'alertes, rien, ca passe directement par l'action du formulaire....Par contre, si j'ouvre une nouvelle page, ca remarche et je peux recommencer le (1)....[/quote]
Doit venir de premier pb...
[quotemsg=1381511,1,19814]

  • Sous FF:  

Ca m'affice le 4 du readyState, mais rien d'autre. Le formulaire est envoyé par l'action du form, mais contrairement à IE, je peux recliquer sur le formulaire et ca recommence le cycle. Par contre, la console JS me renvoie ça:
[quote]
Error: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: http://localhost/home/modules/aj_scripts.js :: anonymous :: line 23"  data: no]
Source File: http://localhost/home/modules/aj_scripts.js
Line: 23
La ligne 23 correspond au if (xmlhttp.status == 200)....


corrige de la même façon pour le form, on va faire étape par étape!
 

Reply

Marsh Posté le 05-06-2006 à 18:56:55    

J'avais oublié le return  [:aless]  !!!!!  
 
Merci anapajari :) Non seulement ça résoud le (1) mais ça résoud aussi tout le reste :love:  
 
 
Bon sinon, des commentaires sur la façon de procéder ? C'est correct/propre ? Conseils ?
La façon dont je détermine comment créer l'object xmlhttp, c'est pas terrible non ?

Reply

Marsh Posté le 06-06-2006 à 09:39:20    

Bin ça va ... :o
Ta function getHTTPObject ressemble bcp à la class HXR, j'imagine que tu t'en étais inspiré.
Le reste, bin on voit pas grand chose donc c'est dur à dire ;)

Reply

Sujets relatifs:

Leave a Replay

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