3

Ext.ajax.request で来る応答のヘッダーを読み取ろうとしています。

ここにコードがあります:

Ext.Ajax.request({ url: 'http://localhost:3000/v0.1/login' ,
    method: 'POST',
    scope:this,
    jsonData: {"_username":username,"_userpwd":password},
    success: function(responseObject){
        var headers = responseObject.getAllResponseHeaders();
        console.info(headers );
        Ext.destroy(Ext.ComponentQuery.query('#loginWindow'));
        this.application.getController('SiteViewController').showView();
    },
    failure: function(responseObject){
        alert(responseObject.status);
    }
    });

ただし、コンソールに出力される唯一のヘッダーは次のとおりです。

Object {content-type: "application/json; charset=utf-8"} 

他のヘッダーはすべて欠落していますが、Chrome インスペクターには表示されています!!!

私は何が欠けていますか?ありがとう

4

2 に答える 2

2

おそらくクロスドメイン要求を行っているため、サーバーによって明示的に公開されるヘッダーのみがあります。同じドメイン リクエストは、すべてのヘッダーを公開します。

サーバー側では、ヘッダー「Access-Control-Expose-Headers」に、公開するヘッダーの完全なリストをカンマで区切って追加する必要があります。php では、次のようになります。

header("Access-Control-Expose-Headers: Content-length, X-My-Own-Header");

ヘッダーは実際に などを通じて利用できresponseObject.getAllResponseHeaders()ますresponseObject.getResponseHeader('content-type')

クロスドメイン リクエストとヘッダーの詳細: http://www.html5rocks.com/en/tutorials/cors/

PS: Ace.Yin には正しい答えがありましたが、単にコメントするだけの評判がありません。

于 2014-08-28T09:08:12.163 に答える
1

私は同じ問題に遭遇し、最終的にここで解決策を見つけました: http://www.html5rocks.com/en/tutorials/cors/

ヘッダーに関する部分は次のとおりです。

Access-Control-Expose-Headers (optional) - 
The XMLHttpRequest 2 object has a getResponseHeader() method that returns the value of
 a particular response header. During a CORS request, the getResponseHeader() method 
can only access simple response headers. 
Simple response headers are defined as follows:

Cache-Control
Content-Language
Content-Type
Expires
Last-Modified
Pragma

If you want clients to be able to access other headers, you have to use the 
Access-Control-Expose-Headers header. The value of this header is a comma-delimited 
list of response headers you want to expose to the client.

まだ確認していませんが、正しい軌道に乗っているようです:)

于 2014-08-10T09:40:22.603 に答える