Ajax не работает в Firefox без предупреждения - PullRequest
0 голосов
/ 25 января 2011
function processAjaxStateChangeForRowAdd() {
    alert(0);
    if (req.readyState == 4) { // Complete
        if (req.status == 200) { // OK response
            processForRowAdd(req.responseText);
        } else {
            alert("Problem: " + req.statusText);
        }
    }
}

Этот код работает нормально для IE, Safari и Firefox, но если я удалю alert, то код не будет работать в Firefox, хотя он все еще работает в IE и Safari.* Кто-нибудь может подсказать, почему он не работает в Firefox без предупреждения?


РЕДАКТИРОВАТЬ: Код, который добавляет строку:

if (window.XMLHttpRequest && browserVersion.indexOf("Microsoft") == -1 ) {
    // code for Firefox, Chrome, Opera, Safari
    req = new XMLHttpRequest("");
    if (req) {
        ajaxProcessed = false;
        req.onreadystatechange = processAjaxStateChangeForRowAdd;
        req.open("POST", url, true);
        req.send();
        // alert("1");
    }
}

Ответы [ 4 ]

3 голосов
/ 25 января 2011

alert блокируется.Это означает, что ваш скрипт временно приостановлен (даже если это на несколько миллисекунд).В течение этого времени ваш AJAX-запрос завершается, и ваш req объект устанавливается.Вы можете добавить задержку (используя setTimeout) к вашему обратному вызову, чтобы проверить это.

Я бы посоветовал вам опубликовать больше вашего сценария, чтобы мы могли помочь вам правильно настроить ваш обратный вызов.В качестве альтернативы, используйте библиотеку, такую ​​как jQuery , чтобы легко устанавливать вызовы AJAX в кросс-браузерном режиме.1012 * в качестве глобальной переменной или используйте анонимную функцию.Следующий код демонстрирует первый метод (с использованием глобальной переменной):

var req;
if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
    if (req) {
        req.onreadystatechange = processAjaxStateChangeForRowAdd;
        req.open("POST", url, true);
        req.send();
    }
}

function processAjaxStateChangeForRowAdd() {
    if (req.readyState == 4) { // Complete
        if (req.status == 200) { // OK response
            processForRowAdd(req.responseText);
        } else {
            alert("Problem: " + req.statusText);
        }
    }
}
1 голос
/ 19 августа 2012
    function getHttp()
    {
       var xmlhttp;
      try
      {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch(e)
      {
        try
        {
              xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e)
        {
            if(typeof XMLHttpRequest != 'undefiend')
            {
            xmlhttp = new XMLHttpRequest();
            }
        }
    }
     return xmlhttp;
}
0 голосов
/ 25 января 2011

Вам также следует проверить состояние ReadyState, следующий код может помочь

req.onreadystatechange=function()
    {
        if (req.readyState==4 && req.status==200)
        {
            processForRowAdd(req.responseText)
        }
}

Считать это для различных значений readyState

0 голосов
/ 25 января 2011

вы можете попробовать это:

 if (request.readyState == 4) {
   if (request.status == 200) {
     var response = request.responseText;
   } else
     alert("status: " + request.status);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...