2014-09-30 207 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 
    }); 
});