这是我的代码。
我的函数发送ajax请求并返回一个值:
function myAjaxCall(){
var myValue=0
var async= false //I have to use synchronized request(otherwise my return value is 0)
xmlhttp.open("GET",URL,async);
xmlhttp.onreadystatechange=function(){
...
myValue = SOMEVALUE;
};
xmlhttp.send();
return myValue
}
我的其他函数将使用myAjaxCall函数返回值
function otherFunc(){
var x= myAjaxCall();
}
除了 Firefox 浏览器之外,事情正在以这种方式完美运行,我知道原因是因为在Firefox中,如果我使用同步请求,onreadystatechange
不会被叫。
但是,在我的情况下,我必须使用 synchronized ajax请求,否则myAjaxCall()
函数返回值始终是initail值“var myValue=0
”。
如何摆脱这个firefox问题??
答案 0 :(得分:3)
使用函数指针而不是内联函数来避免此问题:
function myAjaxCall(){
var myValue=0;
var async= true;
xmlhttp.open("GET",URL,async);
xmlhttp.send();
xmlhttp.onreadystatechange=foo;
}
function foo(bar)
{
var myValue = SOMEVALUE;
return myValue;
}
函数控制JavaScript的范围,所以:
此外,发送应在onReadyStateChange
之前完成