onreadystatechange не вызывается в Firefox - PullRequest
2 голосов
/ 10 февраля 2011

Вот мои коды.

моя функция для отправки 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 не будет ,

В моем случае, однако, я должен использовать синхронизированный ajax-запрос, в противном случае myAjaxCall() Возвращаемое значение функции всегда является значением initail "var myValue=0".

Как избавиться от этой проблемы Firefox ??

1 Ответ

3 голосов
/ 11 октября 2012

Используйте указатель на функцию вместо встроенной функции, чтобы избежать этой проблемы:

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

...