如何在ext5中为每个ajax请求设置公共请求标头?

时间:2014-09-30 02:16:43

标签: extjs extjs-mvc extjs5

我必须为每个ajax请求设置自定义标头,有没有办法只执行一次,而无需在每个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 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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. 
    }
});

答案 2 :(得分:0)

Ext.Ajax是一个单身人士,所以你应该能够这样做:

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

将其放在应用的开头或您认为合适的位置,然后每个后续的Ajax请求都会有此令牌。

答案 3 :(得分:0)

下面的代码将CSRF标头和令牌添加到每个ajax请求中。请求之前请注意

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
    });
});