2014-09-30 118 views
3

我必須爲每個ajax請求設置自定義標題,有沒有辦法做到這一點,而不必在每個ajax代理手動配置它。如何爲ext5中的每個ajax請求設置公共請求標頭?

proxy: { 
    headers: { 
     token: 'xyz' // this token that every proxy should contain to communicate with our remote server. 
    } 
} 

在jQuery中,我可以通過使用「ajaxPrefilter」做到這一點像以下:

jQuery.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    jqXHR.setRequestHeader('token', 'xyz'); 
} 

但我不知道如何正確地做它在ExtJS的,請大家幫忙!

回答

4
Ext.Ajax.setDefaultHeaders({ 
      'Accept':'application/json' 
     }); 
+0

它的工作原理,謝謝。 – gaols 2014-09-30 13:16:45

0

如何瞭解重寫Ext.data.proxy.Ajax這樣

Ext.override(Ext.data.proxy.Ajax, { 
    headers: { 
     token: 'xyz' // this token that every proxy should contain to communicate with your remote server. 
    } 
}); 
0

Ext.Ajax的是一個單獨的,所以你應該能夠做到這一點:

Ext.Ajax.defaultHeaders = { 
    token: 'xyz' 
}; 

將其放置在你的應用程序的開始,或者你認爲合適的地方,然後每個後續的Ajax請求都會有這個令牌。

+1

'Ext.Ajax.defaultHeaders = { 令牌: 'XYZ' };'不爲我工作,而不是'Ext.Ajax.setDefaultHeaders({令牌: '某某'})'工作正常,但我不知道** defaultHeaders **和** setDefaultHeaders **之間的區別。 – gaols 2014-09-30 12:59:20

+0

奇怪的是我在4.2.1文檔的任何地方都找不到'setDefaultHeaders'。我想這只是一個用來設置'defaultHeaders'變量的包裝器......並[根據5.0.1文檔](http://docs.sencha.com/extjs/5.0.1/#!/api/Ext。 data.Connection-method-setDefaultHeaders),這正是它所做的。 – incutonez 2014-09-30 13:09:52

+0

目前我使用的是extjs5,它有'#setDefaultHeaders'方法,請參考[http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.Ajax]。 – gaols 2014-09-30 13:16:09

0

下面的代碼將CSRF頭和令牌添加到所做的每個ajax請求中。注beforerequest

Ext.Ajax.on('beforerequest', function(conn, options) { 
    var x = document.getElementsByTagName("META"); 
    var token = ""; 
    var headerVal = ""; 
    var i; 
    for (i = 0; i < x.length; i++) { 
     if (x[i].name == "_csrf") 
     { 
      token = x[i].content; 
     }else if (x[i].name=="_csrf_header"){ 
      headerVal = x[i].content; 
     } 
    } 

    //Ext.Ajax.defaultHeaders = Ext.apply(Ext.Ajax.defaultHeaders || {}, { headerVal : token }); 
    Ext.Ajax.setDefaultHeaders({ 
     headerVal : token 
    }); 
});