Ajax responseText revient pas défini
Je vais avoir des problèmes avec ce morceau de code; la valeur de retour est de retour en tant que 'undefined'. Quel est le problème?
var fx = null;
xmlhttp.open("GET", URL ,false);
xmlhttp.onreadystatechange=function()
{
alert("enter func");
if (xmlhttp.readyState==4)
{
if (xmlhttp.status == 200)
{
alert(fx);
fx = xmlhttp.responseText;
return fx;
}
else
{
alert("Error" + xmlhttp.statusText);
}
}
}
Le code le plus récent:
function getData(callback)
{
xmlhttp.open("GET", URL ,false);
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4)
{
if (xmlhttp.status == 200)
{
alert(xmlhttp.responseText);
cbfunc(xmlhttp.responseText);
}
else
{
alert("Error" + xmlhttp.statusText);
}
}
}
xmlhttp.send(null);
}
Comment je vais l'appeler:
getData( function cbfoo(txt)
{
//document.form.autodate.value=txt;
alert(txt);
alert(document.form.autodate.value);
});`
Vous devez vous connecter pour publier un commentaire.
Mise à jour basé sur votre modifier
La fixation de ces questions devrait rendre le code du travail.
Vieille réponse
Vous appelez le XMLHttpRequest dans Synchrone mode, ce qui signifie qu'il sera bloc le script jusqu'à ce que la demande a fini, puisque vous êtes de l'affectation de la
onreadystatechange
de rappel après l'appel de blocage (c'est à dire après que la demande a déjà fini), votre code n'est jamais avisé.Depuis le mode synchrone bloque le script, il bloque également l'INTERFACE utilisateur du Navigateur, de sorte qu'il n'est pas recommandé d'utiliser ce mode.
Vous devriez (pour 99% des cas) utiliser le Asynchrone mode et utiliser un callback pour gérer les données, depuis
xmlhttp.open
ne pas retourner la valeur de retour de laonreadystatechange
rappel, il retourne simplementundefined
immédiatement lorsque vous exécutez en mode asynchrone.Maintenant un modèle commun est d'écrire un wrapper pour la demande et de passer un anonyme fonction de ce wrapper, qui plus tard seront appelés en arrière lorsque la requête est terminée.
Vous pouvez maintenant faire une demande et de fournir une fonction qui sera appelée dès que la demande de finitions, à l'intérieur de cette fonction, vous pouvez alors faire ce que vous voulez faire avec la réponse.
C'est le modèle de programmation commun dans le navigateur, toujours aller avec une solution asynchrone, si vous bloquez le script vous bloquer le Navigateur.
xmlhttp.open("GET", URL ,false);
fait l'appel synchrone afin onreadystatechange ne peut jamais le feu. msdn.microsoft.com/en-us/library/ms536648(v=vs. 85).aspxonreadystatechange
de rappel. Comment vous affectation ressembler?func()
, aussi avez-vous essayé le modèle que j'ai suggéré dans ma réponse? Puisque c'est la manière normale de faire de telles demandes.