11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
travaillant dasn un cms, je doit inclure les .js au niveau du site. donc je veux utiliser un .js commun pour inclure en java dans des div variables.
Donc ceci fonctionne :

function traiteReponse() {
	if(objRequete.readyState ==1){
	}
	else {
		if(objRequete.readyState ==4){
			document.getElementById("monDivEnDur").innerHTML =	objRequete.responseText;
		}
	}
}
function envoierequete(script){
	objRequete = creeXMLHttpRequestObject(); 
	objRequete.onreadystatechange = traiteReponse;
	objRequete.open('get', script,true);
	objRequete.send(null);
}

Mais pas cela :

function traiteReponse(monDivVariable) {
	if(objRequete.readyState ==1){
	}
	else {
		if(objRequete.readyState ==4){
			document.getElementById(monDivVariable).innerHTML =	objRequete.responseText;
		}
	}
}
function envoierequete(script,monDivVariable){
	objRequete = creeXMLHttpRequestObject(); 
	objRequete.onreadystatechange = traiteReponse(monDivVariable);
	objRequete.open('get', script,true);
	objRequete.send(null);
}

Il me manque certainement une notion élémentaire de JavaScript, pouvez-vous m'aider ?
Merci
Bonjour,

l'erreur vient du fait que onreadystatechange attend une fonction et là tu lui donnes le résultat d'une fonction : rien.
En fait on pourrait faire ça :
objRequete.onreadystatechange = function(){
    //blabla
};

Et là tu te rends compte qu'il est impossible de passer un paramètre.

Une des solutions serait que traiteReponse retourne une fonction, traiteReponse eyant garder en mémoire monDivVariable.
function traiteReponse(monDivVariable) {
	return (function(){
		if(objRequete.readyState == 1){
		}
		else if(objRequete.readyState == 4){
			document.getElementById(monDivVariable).innerHTML = objRequete.responseText;
		}
	});
}
Ca marche, Merci jo_link_noir Smiley smile

Aurais-tu une ressource didactique à me conseiller sur la question ?
au cas où d'autre ignards arrivent ici avec le même problème, je remets ici le code complet qui permet donc de remplir en ajax un div dont l'id est passé en paramètre dans l'appel de la fonction :

function creeXMLHttpRequestObject(){
	var objRequete = null;
	try {
		objRequete = new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch (Error){
		try {
			objRequete = new ActiveXObject("MSXML2.XMLHTTP");
		}
		catch (Error){
			try {
				objRequete = new XMLHttpRequest();
			}
			catch (Error){
				alert("impossible de créer l'objet XMLHttpRequest");
			}
		}
	}
	return objRequete;
}

function traiteReponse(mon-div-variable) { 
    return (function(){ 
        if(objRequete.readyState == 1){ 
        } 
        else if(objRequete.readyState == 4){ 
            document.getElementById(mon-div-variable).innerHTML = objRequete.responseText; 
        } 
    }); 
}

function envoieRequete(script,mon-div-variable){
	objRequete = creeXMLHttpRequestObject();
	objRequete.onreadystatechange = traiteReponse(mon-div-variable);
	objRequete.open('get', script,true);
	objRequete.send(null);
}


Salut
veloski a écrit :
Aurais-tu une ressource didactique à me conseiller sur la question ?

Non, mais dans mes souvenirs ça ce nomme encapsulation.
Sinon faut chercher du côté de la POO en javascript, y aura peut-être des explications.
Je me souvient, en fait ça s'appelle une closure. Et j'ai trouver retrouver le tuto qui l'expliquer. C'est rapport au problème rencontré avec setInterval() mais c'est la même chose pour l'ajax.