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.