XMLHttpRequest remplacer fonction alert()

laurent35000 -  
 laurent35000 -
Bonjour,

J'ai une fonction GetArticle me permettant de récupérer du contenu html avec XMLHttpRequest.
J'ai un soucis, elle ne fonctionne qu'en insérant un alert() avant le return. Sans le alert(), la variable retournée est "Undefined"...
Quelqu'un aurait-il une solution pour remplacer alert() par une fonction invisible? (qui n'affiche pas de boite de dialogue)
Ou alors une explication sur le pourquoi du besoin de la fonction alert() (j'ai dû faire une erreur de conception de GetArticle())?

[code]
function GetArticle() {
var Ou;
var req = null;

// Création de l'objet
if (window.XMLHttpRequest)
{
req = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
try
{
req = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
}catch (e) {}
}
}

// Sur changement d'etat
req.onreadystatechange = function()
{
if(req.readyState == 4)
{
// Pour débug...
//alert( req.responseText );
Ou = req.responseText;
//alert(Ou);
}
};
req.open("GET", "./tmp/source/dragable-boxes/article.html" , true);
req.send(null);

alert(Ou);
return Ou;
}
/code

Merci!

A+

Laurent
A voir également:

8 réponses

Alain_42 Messages postés 5413 Statut Membre 894
 
il te manque la verif si tout est bien arrivé :

// Sur changement d'etat
req.onreadystatechange = function()
{
if (http_request.readyState == 4) {
		if (http_request.status == 200) {
// Pour débug...
//alert( req.responseText );
Ou = req.responseText;
//alert(Ou);
}
}

};
0
laurent35000
 
Merci pour ta réponse,
J'ai fait la modif, mais j'ai un "Undefined" en return.
Je dois toujours avoir une erreur dans ma requête...


function GetArticle() {
	var Ou;
	var req = null;
	
	// Création de l'objet 
	if (window.XMLHttpRequest)
	{
		req = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		try
		{
			req = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			}catch (e) {}
		}
	}
	
	// Sur changement d'etat
	req.onreadystatechange = function()
	{
		if(req.readyState == 4)
		{
			if (req.status == 200) {

			// Pour débug...
			/*alert( req.responseText );*/
			Ou = req.responseText;
			/*alert(Ou);*/
			}
		}
	};
	req.open("GET", "article.html" , true);
	req.send(null);
	/*Ou = "<div> test article  test article </div>";*/
	//alert(Ou);
	return Ou;
}
0
Alain_42 Messages postés 5413 Statut Membre 894
 
pourqoui mets tu :

return Ou;


à la fin de ta fonction

Ou est chargé à la réponse donc c'est pas bon en fin de fonction creation requette

il faut faire écrire dans un div par exemple la reponse dans la partie fonction traitement réponse

qq part dans ta page tu mets:

<div id="reponse"></div>


et tu rajoutes dans ta fonction:
// Sur changement d'etat
	req.onreadystatechange = function()
	{
		if(req.readyState == 4)
		{
			if (req.status == 200) {

			// Pour débug...
			/*alert( req.responseText );*/
			Ou = req.responseText;
document.getElementById('reponse').innerHTML=Ou;
			/*alert(Ou);*/
			}
0
laurent35000
 
Ok! Merci pour ta réponse.

Je viens de comprendre mon problème.
Je pensais que ma variable "Ou" n'était pas initialisée correctement mais en fait elle l'est trop tard.

Je réutilise le résultat de GetArticle dans une autre fonction javascript.
Cette fonction doit donc prendre la valeur de DisplayArticle trop tôt.

En fait j'ai ceci:

function initDragableBoxesScript()
{
GetArticle();
createDefaultBoxes();
}



Ma fonction createDefaultBoxes() a besoin du résultat de GetArticle. Comment puis-je faire pour être sûr que createDefaultBoxes attende le retour de GetArticle(requête XMLHttpRequest)?
Cela fonctionnerait-il avec un flag mis à 1 en confirmation de retour de la requete et un if testant ce flag comme condition de l'execution de createDefaultBoxes?

Merci!

Laurent
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5413 Statut Membre 894
 
et si tu mets ta variable Ou en global

c a d la declarer en dehors des fonctions

var Ou;

function GetArticle() {
 etc...


car je ne vois pas comment passer cette variable de la fonction qui traite la réponse à la fonction appelante
0
laurent35000
 
Je viens d'essayer en déclarant ma variable en locale et cela ne fonctionne pas.
En fait j'ai l'impression que ma fonction createDefaultBoxes utilise ma variable "Ou" avant qu'elle soit initialiser par GetArticle.
Le seul moment où cela fonctionne est lorsque je met un alert dans Get Article()...

var art_content;

function initDragableBoxesScript()
	{
		GetArticle();
		createDefaultBoxes();	// Create default boxes.
	}

function createDefaultBoxes()
	{
		var htmlContentOfNewBox = art_content;	// HTML content of new box
		var titleOfNewBox = 'Test title';
		if(!staticObjectArray['staticObject3']){
			var newIndex = createABox(1,100,false,'staticObject3');
			document.getElementById('dragableBoxContent' + newIndex).innerHTML = htmlContentOfNewBox;		
			document.getElementById('dragableBoxHeader_txt' + newIndex).innerHTML = titleOfNewBox;		
		}else{
			document.getElementById('dragableBoxContent' + staticObjectArray['staticObject3']).innerHTML = htmlContentOfNewBox;	
			document.getElementById('dragableBoxHeader_txt' + staticObjectArray['staticObject3']).innerHTML = titleOfNewBox;	
			
		}
		hideHeaderOptionsForStaticBoxes(staticObjectArray['staticObject3']);
		
	}

function GetArticle() {
	var req = null;
	
	// Création de l'objet 
	if (window.XMLHttpRequest)
	{
		req = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		try
		{
			req = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			}catch (e) {}
		}
	}
	
	// Sur changement d'etat
	req.onreadystatechange = function()
	{
		if(req.readyState == 4)
		{
			art_content = req.responseText;
		}
	};
	req.open("GET", "article.html" , true);
	req.send(null);


	alert(art_content);
}

	window.onload = initDragableBoxesScript;

0
laurent35000
 
Edit: il fallait lire "variable en globale"
0
laurent35000
 
Hop! Problème réglé en mettant l'appel de ma fonction createDefaultBoxes dans GetArticle.
Donc maintenant ça fonctionne!
0