[Ajax de débutant] : problème avec l'attribut status ?!

: problème avec l'attribut status ?! [Ajax de débutant] - HTML/CSS - Programmation

Marsh Posté le 01-09-2006 à 17:19:42    

Salut,  
 
Je programme en PHP depuis longtemps. Je connais aussi à peu près Javascript. Je suis assez interessé par Ajax, ou plutôt Aja (sans le x de xml pour le moment).  
Cela fait donc depuis hier que je me documente, et cela fait quelques heures que j'essaie de réaliser mon premier script.  
 
Voici le truc que j'ai envie de réaliser pour tester Ajax :  
 
J'ai un formulaire avec un champs texte et un bouton submit :  

<FORM method="POST" name="ajax" action="">
<input type="text" name="nom" size="25" />
<input type="submit" onclick="traitementJS()" value="Envoie-moi ton nom !" />
<br /><br />
<div id="utilisateur">
Ce texte changera !  
</div>
</FORM>


 
Ce formulaire demande un texte, et lance la fonction traitementJS quand on clique sur le bouton.  
Le but avoué de cette fonction traitementJS est de récupérer la donnée du champs texte, de l'envoyer à une page PHP par la méthode post grace à xmlhttprequest, de récupérer un résultat, et de l'afficher dans le div "utilisateur".  
 
je pensais que c'était un exemple assez simple pour moi.. Et bien je me suis trompé ! Je bloque lamentablement... Aucun site cherché sur Google, ou aucun sujet cherché sur ce forum n'a pu m'aider...  
 
Voici donc la suite de mon programme :  
 
Le fichier Javascript et ses deux fonctions :  

function getXhr()
{
 var xhr = null;
 if(window.XMLHttpRequest) // Firefox et autres
  {
   xhr = new XMLHttpRequest();  
   //xhr.overrideMimeType('text/xml');
  }
 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 XMLHTTPRequest..." );  
   xhr = false;  
  }  
 return xhr;  
}


function traitementJS()
{
 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  
  alert("prout" ); // C'est juste pour voir le détail.  
  document.getElementById('utilisateur').innerHTML = "Chargement... readyState:"+xhr.readyState;
  if(xhr.readyState == 4)
   {
    if(xhr.status == 200) // C'est là que ça merde...  
     {
      alert(xhr.responseText);  
      document.getElementById('utilisateur').innerHTML = xhr.responseText;
     }
    else alert("erreur de status" );  
   }
 }
 
 xhr.open("POST","traitementPHP.php",true);
 // On est en POST :  
 xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 // Argument :  
 var name=document.ajax.nom.value;  
 xhr.send("name="+name);  
}


 
 
Et enfin voici un fichier php quelconque qui sert à prouver qu'on a bien traité des données :  
TraitementPHP.php :  

<?php
 echo "<br>Message de PHP : <br><b>";
 if(isset($_POST["name"]))
  {
   echo "Bonour ".$_POST["name"].". Je vous souhaite la bienvenue sur le site !<br>";
   if($_POST["name"] == "Dr_cube" ) echo "Salut le Doc !";  
  }
 echo "</b>";
?>


 
 
 
 
Mon problème se situe visiblement dans la fonction Javascript traitementJS : le xhr.status est inconnu, et donc il n'entre jamais dans le if, et ne fais jamais ce qu'il y a à faire.. Il m'est même impossible d'afficher xhr.status dans un alert... Dès qu'il y a l'expression xhr.status, tout s'arrête.  
Dans la console Javascript de Firefox, voici l'erreur que j'ai au moment de rencontrer xhr.status :  
 

Erreur : [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: http://[......]/ajax.js :: anonymous :: line 106"  data: no]
Fichier source : http://[.......]/ajax.js
Ligne : 106


 
Je ne comprend pas cette erreur... Pour faire ce script, je me suis inspiré entre autre de cette page :  
http://siddh.developpez.com/articles/ajax/
 
 
Merci beaucoup pour votre aide ! Ca fait des heures que je cherche sans trouver mon erreur.. Je suis sûr que pour quelqu'un d'expérimenté dans le domaine, il ne faudra que quelques instants pour trouver mon erreur...  
Pour info je fais ce programme sur mon Mac, et donc je n'ai testé que sous Firefox et Safari.  
Firefox n'entre pas dans le else du status. Safari affiche l'alert qui est dans le else.


Message édité par Docteur_Cube le 01-09-2006 à 17:46:28

---------------
Dr_cube.
Reply

Marsh Posté le 01-09-2006 à 17:19:42   

Reply

Marsh Posté le 01-09-2006 à 18:00:12    

RAAAAH j'en ai marre.. J'ai beau chercher, et torturer mes fonctions dans tous les sens, je n'arrive à rien... J'implore votre aide !


---------------
Dr_cube.
Reply

Marsh Posté le 02-09-2006 à 10:32:36    

Hum, permettez-moi de remonter légèrement ce topic..  
J'ai essayé quelques changements, notamment de tout rassembler dans une seule fonction JS, mais visiblement, ça ne marche pas mieux.. S'il vous plait, aidez-moi, je craque là.. Il doit y avoir un truc que je n'ai pas compris..  
 
Merci !

Reply

Marsh Posté le 03-09-2006 à 11:32:50    

Bon, je re-monte une dernière fois mon sujet... Je n'ai toujours trouvé la solution, et je vois que personne ne connait la réponse sur ce forum..

Reply

Marsh Posté le 05-09-2006 à 15:27:00    

Salut,
 
je sais pas si ça peut t'aider ... mais bon !  :D
 
http://www.toutjavascript.com/savo [...] quest.php3
 
 :hello:

Reply

Sujets relatifs:

Leave a Replay

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