Получение кода ответа AJAX HTTP как 0 - PullRequest
3 голосов
/ 23 апреля 2010

У меня довольно простой код AJAX и PHP. При вызове PHP через AJAX он получает код ответа как 0. PHP-код успешно выполнен, но я не могу получить ответ Что означает этот статус «0» и как я могу решить эту проблему?

function confirmUser(id)
{
    xmlhttp=GetXmlHttpObject();
    regid = id;
    if (xmlhttp==null)  {
        alert ("Browser does not support HTTP Request");
        return;
    }
    var url="confirm.php";
    url=url+"?id="+id;
    url=url+"&a=confirm";
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            $("#txtHint" + regid).text("Awaiting confirmation");
        } else {
            alert (xmlhttp.status); //this shows '0'
        }
    };
    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
}

Ну, это тот javascript, который я использовал. Извините, если бы я добавил что-то большее, чем это. Также скажите мне, что я пропустил. Я ценю вашу помощь

Функция GetXmlHttpObject:

function GetXmlHttpObject()
{
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        return new XMLHttpRequest();
    }
    if (window.ActiveXObject) {
        // code for IE6, IE5
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
    return null;
}

Ответы [ 4 ]

3 голосов
/ 23 апреля 2010

При работе с XMLHttpRequests в прошлом я обнаружил, что статус 0 обычно возвращается для локально обработанных файлов.Когда я увидел этот вопрос, у меня была небольшая охота вокруг, и я нашел подтверждение этому на следующих страницах:

2 голосов
/ 23 апреля 2010

Вот готовые коды для вас.

0. Uninitialized
1. Set up, but not sent
2. Sent
3. In flight
4. Complete

(Источник: http://www.stevefenton.co.uk/Content/Blog/Date/201004/Blog/AJAX-Ready-State-Codes/)

Вы постоянно зависаете на ReadyState 0? Если это так, значит, ваш запрос не был отправлен, хотя я вижу строку кода в вашем примере "xmlhttp.send (null)" ...

Я бы предсказал, что вы получите 0 до вызова send, но после этого другой код статуса. Что произойдет, если вы немного подождете?

1 голос
/ 24 апреля 2010

Я знаю, что люди могут не захотеть это слышать, но это как раз то, для чего нужны фреймворки JS.Зачем связываться со всеми различными браузерными наклонностями и бедствиями, которые являются пользовательскими вызовами AJAX, когда вы можете просто сделать простой вызов AJAX через jQuery.

По сути, вы заново изобретаете колесо, и без причины.Пусть ваш php вернет данные JSON и вставит переменную в код успеха, если вам нужно проверить это.

<script src="jquery.js"></script>
<script>
  $.get("myphp.php", { id : "yes", blah : "stuff" }, function(data) {
  if (data.success == 1) {
    alert("got data");
  } else {
    alert("didn't get data");
  }
},"json");
</script>

Boom, теперь у вас есть кросс-браузерный AJAX.

0 голосов
/ 22 мая 2012

Это может произойти, если вы запрашиваете ресурс HTTPS, и рукопожатие не удается (например, недействительный сертификат).В частности, если вы используете объект запроса XML извне браузера, ошибка может быть неочевидной.

...