17

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);
4

1 に答える 1

34

MSXML HTTPでのXMLHTTPRequestの実装(少なくともWindows XP SP3+のIE8.0では)は、ステータスコード204(コンテンツなし)のHTTP応答を適切に処理しません。`status'プロパティの値は1223です。

これは既知のバグであり、ほとんどのjavascriptベースのフレームワークはこの状況を処理し、IEで1223から204に正規化します

したがって、問題の解決策は次のようになります

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

参照:

道場-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

于 2012-04-06T17:53:59.447 に答える