script en ajax ne fonctionne pas ?

x@v
Mammouth du PHP | 570 Messages

29 janv. 2008, 14:42

Bonjour,
j'essaie de faire de l'ajax avec un livre, dans Firebug j'ai bien la requete reçu, mais pas dans ma page html ?
index.php

Code : Tout sélectionner

<html> <head> <script language="JavaScript" src="req.js"></script> <title>ajax1 :: ....</title></head> <body> <form name="form"> <select name="city" size="1" onClick="insertDonne()"> <option>Lille</option> <option>Paris</option> <option>Mulhouse</option> <option>Lyon</option> <option>Marseille</option> <option>Bordeaux</option> <option>Carrouge</option> <option>Brest</option> <option>Alençon</option> <option>Lorient</option> <option>Nante</option> <option>Cassis</option> <option>Canne</option> <option>Menton</option> <option>Toulouse</option> <option>Auxerre</option> </select> </form><br /> <span id="capitale">.... ::: </span> </body> </html>
city.php

Code : Tout sélectionner

<?php echo 'La capitale de ce Land est '; switch($_REQUEST['ou']) { case 1: echo 'Lille dans le nord'; break; case 2: echo 'Paris en île de France'; break; case 3: echo 'Mulhouse toujours'; break; case 4: echo 'Lyon capital de la gastronomie'; break; case 5: echo 'Marseille à l\'ailloly'; break; case 6: echo 'Bordeaux est riche en tanins'; break; case 7: echo 'Carrouge le pot de chambre de la france'; break; case 8: echo 'Brest le homard'; break; case 9: echo 'Alençon à la moisson'; break; case 10: echo 'Lorient au temps des pêcheurs'; break; case 11: echo 'Nante le crépuscule de l\'atlantique'; break; case 12: echo 'Cassis à la boisson dans ces rues'; break; case 13: echo 'Canne à la croisée du sud'; break; case 14: echo 'Menton de l\'Italie'; break; case 15: echo 'Toulouse en rose'; break; case 16: echo 'Auxerre joue rond'; break; } ?>
req.js

Code : Tout sélectionner

var objetRequest; if(navigator.appName.search("Microsoft")> -1) { objetRequest = new ActiveXObject("Microsoft.XMLHTTP"); objetRequest = new ActiveXObject("MSXML2.XMLHTTP"); } else { objetRequest = new XMLHttpRequest(); } function insertDonne() { for(i=1; i<=16; i++) { if(this.document.form.city.options[i-1].selected) { objetRequest.open('get', 'city.php?ou='+i, true); objetRequest.onreadystatechange = traiteResponse; objetRequest.send(null); break; } } } function traiteResponse() { if(objetRequest.readyState == 4) { document.getElementById("capitale").innerHMTL = objetRequest.responseText; } }

Code : Tout sélectionner

Mon entête Response Headers Date Tue, 29 Jan 2008 10:48:33 GMT Server Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6.2 Last-Modified Tue, 29 Jan 2008 10:41:06 GMT Etag "b8670-272-fd4b480" Accept-Ranges bytes Content-Length 626 Content-Type application/x-javascript Request Headers Host 127.0.0.1 User-Agent Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.1.11) Gecko/20071204 Ubuntu/7.10 (gutsy) Firefox/2.0.0.11 Accept */* Accept-Language fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding gzip,deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 300 Connection keep-alive Referer http://127.0.0.1/ajax1/ Cookie PHPSESSID=fd3b6d3484213dc6a02fe2fc88bdf314 If-Modified-Since Tue, 29 Jan 2008 10:41:06 GMT If-None-Match "b8670-272-fd4b480" Cache-Control max-age=0
Cette ligne me laisse perpplexe je ne sais comment la traduire ?

Code : Tout sélectionner

keep-Alive 300
Merci
edi ->
j'ai cette exception de lancée !

Code : Tout sélectionner

[Exception... "Component is not available" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: file:///usr/lib/firefox/components/nsSessionStore.js :: sss_saveState :: line 1749" data: no] [Break on this error] oState.session = { state: ((this._loadState == STATE_RUNNING) ? STATE_RUNNIN...
Linux - Ubuntu 7.10

Eléphant du PHP | 445 Messages

29 janv. 2008, 15:19

Essayes :
// Remplaces
objetRequest.onreadystatechange = traiteResponse; 
// Par
objetRequest.onreadystatechange = function() { traiteResponse(objetRequest); };
ET
// Remplaces
function traiteResponse()  
// Par
function traiteResponse(objetRequest) 

x@v
Mammouth du PHP | 570 Messages

29 janv. 2008, 16:04

J'ai fais les changement en initialisant et affectant la variable à null
mais rien n'y fait, j'ai toujours dans Fireburg cette méchante erreur :

Code : Tout sélectionner

[Exception... "Component is not available" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: file:///usr/lib/firefox/components/nsSessionStore.js :: sss_saveState :: line 1749" data: no] [Break on this error] oState.session = { state: ((this._loadState == STATE_RUNNING) ? STATE_RUNNIN... nsSessionStore.js (line 1749) GET http://127.0.0.1/ajax1/city.php?ou=8 (32ms)req.js (line 25) GET http://127.0.0.1/ajax1/city.php?ou=8 (12ms)req.js (line 25) ParamsHeadersPostResponse Response Headers Request Headers La capitale de ce Land est Brest le homard

Code : Tout sélectionner

//////////////////////////////////////////////////////////////////// var objetRequest = null; // On test si on utilise directement XMLHttpRequest() avec firefox if(window.XMLHttpRequest) objetRequest = new XMLHttpRequest(); // ou si on est sous Internet Explorer else if(window.ActiveXObject) objetRequest = new ActiveXObject("Microsoft.XMLHTTP"); else { alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); //return; } //////////////////////////////////////////////////////////////////// function insertDonne() { for(i=1; i<=16; i++) { if(this.document.form.city.options[i-1].selected) { objetRequest.open('get', 'city.php?ou='+i, true); objetRequest.onreadystatechange = function() { traiteResponse(objetRequest); }; //objetRequest.onreadystatechange = traiteResponse; // on réinitielise l'objet objetRequest.send(null); break; } } } //////////////////////////////////////////////////////////////////// function traiteResponse(objetRequest) //function traiteResponse() { if(objetRequest.readyState == 4 && objetRequest.status == 200) { document.getElementById("capitale").innerHMTL = objetRequest.responseText; } }

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 janv. 2008, 17:17

La variable objetRequest étant déclarée comme globale il n'est pas utile de la passer en paramètre de la fonction...

Je vois pas trop ce qui peut poser problème, mais en attendant, tu peux virer ta boucle for() et déterminer ton i simplement avec "document.form.city.selectedIndex". Ca te fera une boucle en moins et un code plus clair :)

A quel moment à lieu l'erreur exactement ? quand tu récupères le readyState ? le responseText ? au moment où tu rentres dans traiteResponse() ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 445 Messages

29 janv. 2008, 17:48

La variable objetRequest étant déclarée comme globale il n'est pas utile de la passer en paramètre de la fonction...
Ca je l'ai vu mais teant donné que je n'ai pas vu d'autre erreurs, je me suis dit que cela pourrait etre cela.

Mets un alert(); au debut de traiterReponse pour voir si la fonction est bien executer.

x@v
Mammouth du PHP | 570 Messages

29 janv. 2008, 22:48

En faite un pote ma donné une fonction qui fonctionne.

Code : Tout sélectionner

var xhr = null; function getXhr() { if(window.XMLHttpRequest) xhr = new XMLHttpRequest(); else if(window.ActiveXObject) { try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } else { alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); xhr = false; } } function ShowPage() { getXhr() xhr.onreadystatechange = function() { if(xhr.readyState == 4 && xhr.status == 200) { document.getElementById('CenterCol').innerHTML=xhr.responseText; } } i=document.form.city.selectedIndex; xhr.open("GET","city.php?ou="+i,true); xhr.send(null); }
effectivement avec l'attribut selectIndex qui me renvoie un array() indexer sa fonctionne.
Par contre que veux dire ?
keep-Alive 300
Ne faut pas t-il vider le cache quand on développe en Ajax ?
J"ajoute que les codes donnés dans le livre Ajax et php de CampusPress sont faux et erronné.
A 36€ le livre sa fait mal au coeur

Merci