2

私のajaxコードは次のとおりです。

 xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
        alert(xhr.status);
        if (xhr.status == 200) {
            alert("200");               
        }
        else if (xhr.status == 8001) {
            alert("8001");               
        }
        else if (xhr.status == 8000) {
            alert("8000");             
        }
        else if (xhr.status == 7000) {
            alert("7000");                
        }
        else {
            alert("x");              
        }
    }
};
xhr.open("POST","URL",true);
xhr.send(null);

xhr.openで対処したページのコードは次のとおりです。

    if (request.getSession().getAttribute("SATI_UID") == null) {
        response.sendError(8000);
    } else {
            response.sendError(8001);
    }

firefox と chrome で動作しますが、サファリでは常にステータス 200 になります。サファリ 5.1.7 を使用しています。私もresponse.setStatus代わりに使用していますresponse.sendErrorが、機能していません。なぜこれが起こるのか誰か知っていますか?

4

2 に答える 2

3

サーブレットで、応答サーバー側のステータスを設定する必要があります。

AJAX クライアントは応答を取得し、ステータス コードをxhr.statusに保存します。

有効なHTTP ステータス コードである必要があります。

応答がコミットされ、ヘッダーが送信される前に、応答コードを設定する必要があることを忘れないでください。

これを行うには、HttpServletResponse #setStatusまたはHttpServletResponse#sendErrorを使用することをお勧めします。

または、代わりに web.xml でエラー ページを定義することもできます。チェックアウト: JSP エラー ハンドラで HTTP ステータス コードを設定する方法

于 2015-02-07T08:33:50.170 に答える
1

これは、非標準の http 法を使用しているためだと思います。適切なタイプの 4xx または 5xx ( http ステータス コードを参照) のエラーをスローする必要があります。これは、このコードがHTTP プロトコルで実際に意味を持つためです。次に、応答の本文で、エラーに対して独自のカスタム コードを設定します。

要約すると、http 応答のステータス コードを使用して独自のステータス コードを送信するべきではありません。これは、プロトコルを壊し、ミドルウェア サーバー (たとえばサーバーのキャッシュなど) で何らかの問題を引き起こす可能性があるためです。

于 2015-02-07T08:35:52.920 に答える