变量'output'未保持其值
function send()
{
var output;
var xmlhttp;
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
output = xmlhttp.responseText;
此输出显示“hello world”
alert(output);
}
}
xmlhttp.open("GET",'mp.php',true);
xmlhttp.send();
此输出显示“未定义”:
alert(output);
return output
}
当导航到浏览器
时,mp.php的内容显示“Hello world”返回时如何使输出变量不是'Undefined'?
答案 0 :(得分:2)
Ajax调用是异步的。您的代码流程如下:
xmlhttp.send(); // async, so program flow will continue
alert(output); // this happened BEFORE the ajax call returned, so it is undefined here.
更好的方法是在ajax调用完成时使用回调。回调可以执行从ajax调用返回的值所需的任何操作。
在相关的说明中,您可能会发现使用jquery更容易。您可以将其简化为
$.get('myurl',{
success: function(res) { // do success function }
});
答案 1 :(得分:0)
Theres没有回头。委托(.onreadystatechange = function())用完了你的函数(send())。有三种方法:a)定义全局变量输出并使用它; b)同步运行xttpRequest(没有事件和事件处理); c)更改代码的结构以处理成功事件。