2

この質問から Ext-JS リクエストにカスタム ヘッダーを追加する方法を学びました。

ExtJS 4 ストアを使用した HTTP ヘッダー

そして今、問題がユーザー エラーである場合の例外処理の問題に対処しようとしています。この質問はここで扱われます:

REST について: 動詞、エラー コード、および認証

回答の 1 つは、最も近い HTTP エラー コードにマッピングすることを提案していますが、カスタム応答ヘッダーを使用して例外情報をクライアントに返すことも提案しています。

基本的な HTTP ステータス コードを拡張しないことを強くお勧めします。状況に正確に一致するものが見つからない場合は、最も近いものを選択し、エラーの詳細を応答本文に入れます。また、HTTP ヘッダーは拡張可能であることにも注意してください。アプリケーションは、好きなカスタム ヘッダーをすべて定義できます。たとえば、私が取り組んだ 1 つのアプリケーションは、複数の状況で 404 Not Found を返すことがありました。その理由でクライアントに応答本文を解析させるのではなく、独自のステータス コード拡張を含む新しいヘッダー X-Status-Extended を追加しただけです。したがって、次のような応答が表示される場合があります。

HTTP/1.1 404 Not Found
X-Status-Extended: 404.3 More Specific Error Here

私はこのアイデアがとても好きです。しかし、ExtJS 内からこのカスタム応答ヘッダーにアクセスして、例外メッセージを抽出する方法がわかりません。

4

1 に答える 1

4

応答オブジェクトには、すべてのヘッダーのキーと値のペアにアクセスするために使用できる getAllResponseHeader() メソッドがあります。

Extjs では、次のようなことができます。

Ext.Ajax.request({
    url: 'www.microsoft.com',
    method: 'GET',
    failure: function(response){
        console.log(response.getAllResponseHeaders());
     }
});​

これは、次の情報を持つインスタンスを返します。

接続:「キープアライブ」
コンテンツエンコーディング:「gzip」
content-type: "text/html; charset=utf-8"
日付: 「2012 年 12 月 13 日木曜日 03:10:15 GMT」
サーバー: "nginx/0.8.54"
転送エンコーディング: 「チャンク」
異なる:「クッキー」

あなたの場合、次のことを行う必要があります。

    failure: function(response){
        var header = response.getAllResponseHeaders(),
            statusEx = header['X-Status-Extended'];

        if(statusEx === '404.3 More Specific Error Here'){
            // do something here
        }
     }
于 2012-12-13T03:40:11.100 に答える