MSIE Возвращает код состояния 1223 для запроса Ajax

Я отправляю форму с использованием ajax-запроса (метод POST) и проверяю код состояния HTTP на ответ, чтобы убедиться, что он был успешным или нет.

Он отлично работает в Firefox, но, конечно же, не работает на MSIE-8. Представление действительно отлично работает, я могу проверить свой сервер и подтвердить, что работа выполнена, и сервер ответил кодом состояния 204. Опять же, firefox правильно дает мне код статуса 204 из объекта запроса, но IE дает код состояния из 1223.

Любые идеи, как я могу получить точный код состояния в MSIE? Код, который отправляет форму и проверяет ответ, ниже.

    var req = new XMLHttpRequest();
    req.open("POST", "p.php?i=" + self.__isid, true);
    //Send the proper header information along with the request
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    req.setRequestHeader("Content-length", formdata.length);
    req.setRequestHeader("Connection", "close");

    req.onreadystatechange = function()
    {
        if(req.readyState == 4)
        {
            if(req.status == 204 || req.status == 200)
            {
                //Success. Update the feed.
                self.__postFeed.update();
                self.__form.reset();
            }
            else
            {
                //TODO: Better error handling.
                alert("Error submitting post:\n" + req.responseText);
            }
        }
    }
    req.send(formdata);

Ответы

Ответ 1

Выполнение XMLHTTPRequest в MSXML HTTP (на в IE 8.0 в Windows XP SP3 +) не обрабатывает HTTP-ответы с кодом состояния 204 (без содержимого); свойство `status 'имеет значение 1223.

Это известная ошибка, и большинство фреймворков на основе javascript обрабатывают эту ситуацию и нормализуют 1223 до 204 в IE

Итак, решение вашей проблемы будет таким:

// Normalize IE response to HTTP 204 when Win error 1223.
status : (conn.status == 1223) ? 204 : conn.status,
// Normalize IE statusText to "No Content" instead of "Unknown".
statusText : (conn.status == 1223) ? "No Content" : conn.statusText

Справка:

dojo - http://trac.dojotoolkit.org/ticket/2418

прототип - https://prototype.lighthouseapp.com/projects/8886/tickets/129-ie-mangles-http-response-status-code-204-to-1223

YUI - http://developer.yahoo.com/yui/docs/connection.js.html (handleTransactionResponse)

JQuery - http://bugs.jquery.com/ticket/1450

ExtJS - http://www.sencha.com/forum/showthread.php?85908-FIXED-732-Ext-doesn-t-normalize-IE-s-crazy-HTTP-status-code-1223