我使用下面的代码来显示函数test2返回的值。
显示的输出是:x的值是:未定义的
有人能帮助我解释如何从函数test2返回一个值吗?请注意,函数test2是XMLHTTPRequest
<script language="javascript">
function test1()
{
var x = test2();
alert('Value of x is: '+x);
}
function test2()
{
if(window.XMLHttpRequest)
{
abcd= new XMLHttpRequest();
}
else
{
abcd=new ActiveXObject("Microsoft.XMLHTTP");
}
abcd.onreadystatechange=function()
{
if (abcd.readyState==4 && abcd.status==200)
{
return abcd.responseText; // it is getting value 2 here
}
else if(abcd.readyState < 4)
{
return -1;
}
}
abcd.open("GET",sam.php,true);
abcd.send();
}
</script>发布于 2011-08-10 22:10:08
听起来,您希望XML请求中的值是test2的返回。这是不可能的,因为这个XML请求异步执行,test2同步执行。
处理此问题的正确方法是向test2传递一个回调,以便在请求完成时执行。回调提供了从XML请求返回的值。例如
function test1() {
test2(function (x) {
alert('The value of x is ' + x);
});
}
function test2(callback) {
...
abcd.onreadystatechange=function() {
if (abcd.readyState==4 && abcd.status==200) {
callback(abcd.responseText);
} else {
callback(-1);
}
}
...
}发布于 2011-08-10 22:08:07
函数test2立即返回(值undefined)。在尝试从AJAX调用获取任何数据之前,您需要等待AJAX调用的返回。这是AJAX的(A)同步部分。
abcd.onreadystatechange=function()
{
if (abcd.readyState==4 && abcd.status==200)
{
// Put the code that deals with the returned value here...
}
else if(abcd.readyState < 4)
{
return -1;
}
}发布于 2011-08-10 22:11:38
正如预期的那样,函数test1调用test2,该函数生成XMLHttpRequest。但问题是你的时间问题。只有在状态发生变化时才调用onreadystatechange。当状态改变时,函数test2已经退出而没有返回值。
相反,您的警报应该发生在您目前有return abcd.responseText的地方。
https://stackoverflow.com/questions/7018451
复制相似问题