11548 sujets

JavaScript, DOM et API Web HTML5

Prenons le code suivant :


function fct_http(page) // envoie une requete asynchrone sur le serveur
{

	var url = "http://serveur/"+page ;

	if(window.XMLHttpRequest) var obj = new XMLHttpRequest(); // Firefox
	else if(window.ActiveXObject) var obj = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer
	obj.open("GET", url, true); // mode asynchrone
	[b]obj.page = page ;[/b]
	obj.onreadystatechange=function(){if(obj.readyState == 4) fct_receive(obj.page, obj.responseText) ; } ;
	obj.send(null);
}
function fct_receive(page,text) // traite de resultat de la requete
{
	alert("page="+page) ;
}
function fct_test() // teste l'ensemble
{
	fct_http("page.html") ;
}

L'expression obj.page=page est acceptée sous Mozilla mais elle est refusée sous Internet Explorer (v6) lequel dit : "Cet objet ne gère pas cette propriété ou cette méthode".

Je ne vois pas comment contourner le problème. Quelqu'un aurait une solution ?
Modifié par oslo10e (30 Nov 2007 - 11:50)
Salut,

Tu peux faire beaucoup plus simple :

function fct_http(page) // envoie une requete asynchrone sur le serveur
{

	var url = "http://serveur/"+page ;

	if(window.XMLHttpRequest) var obj = new XMLHttpRequest(); // Firefox
	else if(window.ActiveXObject) var obj = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer
	obj.open("GET", url, true); // mode asynchrone

	obj.onreadystatechange=function(){if(obj.readyState == 4) fct_receive([b]page[/b], obj.responseText) ; } ;
	obj.send(null);
}
function fct_receive(page,text) // traite de resultat de la requete
{
	alert("page="+page) ;
}
function fct_test() // teste l'ensemble
{
	fct_http("page.html") ;
}


P.S. : Soit dit en passant, un "bonjour" est apprécié quand on pose une question sur le forum...
Modifié par Julien Royer (30 Nov 2007 - 11:19)
Bonjour Julien,

oui, effectivement !

Je ne sais pour quelle raison, je pensais que la variable locale page n'était pas connue dans le contexte de l'événement onreadystatechange et que pas conséquent cela ne pouvait pas marcher.
Voilà donc des heures que je cherche pour rien.

Merci beaucoup - et merci d'avoir répondu si rapidement !

Olivier
oslo10e a écrit :
Je ne sais pour quelle raison, je pensais que la variable locale page n'était pas connue dans le contexte de l'événement onreadystatechange et que pas conséquent cela ne pouvait pas marcher.

En fait, lorsqu'une fonction est créée à l'intérieur d'une autre, elle hérite des variables déclarées dans la fonction qui l'englobe. On appelle ça une "closure". Par contre, dans certains cas ça peut poser des problèmes de fuites de mémoire, notamment avec IE. Smiley smile
a écrit :
Serais-tu en train de dire que ton problème est [Résolu] ?

oui, je modifie le statut en conséquence.

(par contre c'est dommage de ne pas pouvoir modifier le statut sans passer par le premier post)