在firefox中没有调用onreadystatechange

时间:2011-02-10 14:34:25

标签: javascript ajax firefox xmlhttprequest onreadystatechange

这是我的代码。

我的函数发送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问题??

1 个答案:

答案 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的范围,所以:

  • 匿名函数创建新范围,而引用的函数位于全局范围
  • 将函数移出范围可避免名称空间冲突
  • myValue在新范围内继承一个值,而不在全局范围内

此外,发送应在onReadyStateChange

之前完成