XMLHttpRequest remplacer fonction alert()

Fermé
laurent35000 - 5 juin 2009 à 17:00
 laurent35000 - 8 juin 2009 à 17:21
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 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 901
5 juin 2009 à 17:07
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
5 juin 2009 à 17:41
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 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 901
5 juin 2009 à 18:04
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
8 juin 2009 à 14:12
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 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 901
8 juin 2009 à 14:46
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
8 juin 2009 à 17:10
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
8 juin 2009 à 17:17
Edit: il fallait lire "variable en globale"
0
laurent35000
8 juin 2009 à 17:21
Hop! Problème réglé en mettant l'appel de ma fonction createDefaultBoxes dans GetArticle.
Donc maintenant ça fonctionne!
0