XMLHttpRequest remplacer fonction alert()

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

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. 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);
    }
    }
    
    };
    1. 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;
      }
      1. 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);*/
        			}
        
        1. 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
          1. 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
            1. 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;
              
              
              1. Hop! Problème réglé en mettant l'appel de ma fonction createDefaultBoxes dans GetArticle.
                Donc maintenant ça fonctionne!