【发布时间】:2011-06-24 21:49:42
【问题描述】:
这是我的代码。
我的函数发送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 中,如果我使用 synchronized 请求,onreadystatechange 将不会叫做。
然而,就我而言,我必须使用 同步 ajax 请求,否则myAjaxCall() 函数的返回值始终是初始值“var myValue=0”。
如何摆脱这个firefox问题??
【问题讨论】:
-
不要使用同步的 Ajax 请求只是为了能够立即返回某些内容 - 它们会停止页面上的所有其他内容并可能冻结浏览器。改为更改程序的架构方式更好
-
那么我可以拥有什么样的架构.....
-
使用
otherFunc作为您的回调处理程序并在其中访问xmlhttp.responseText。 -
Firefox 4 之前的 Firefox 版本不会为同步 XMLHttpRequest 触发 onreadystatechange,正如您所注意到的。但是既然这是一个同步请求,为什么首先需要 onreadystatechange 处理程序呢?
标签: javascript ajax firefox xmlhttprequest onreadystatechange