Jquery在$ .ajax中全局发送到服务器之前覆盖数据对象

时间:2014-11-05 23:56:44

标签: jquery ajax

我使用

将所有请求发送到服务器
$.ajax()

我想要做的是在发送到服务器之前向所有这些请求全局添加_csrf令牌。

我正在查看该函数是jquery beforesend(),但我不知道如何为所有ajax请求声明此函数

3 个答案:

答案 0 :(得分:0)

请参阅http://api.jquery.com/Ajax_Events/

beforeSend()是本地事件,如果要绑定发送所有ajax请求,可以使用ajaxSend() document为所有ajax请求触发。

$(document).bind("ajaxSend", function(){
    //add your token
}

http://api.jquery.com/ajaxsend/

$(document).ajaxSend(function( event, jqxhr, settings ) {
    console.log(setting.data); //get the data from settings and update it
});

答案 1 :(得分:0)

您想通过$.ajaxSetup设置默认值。

$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        // Do something
    }
});

答案 2 :(得分:0)

使用 $。ajaxPrefilter 的另一个选项,与$ .ajaxSetup相反,不会被来自您所有项目的单个$ .ajax调用覆盖:

(它使用jQuery Unserialize插件)

csrfData[csrfTokenName] = csrfToken;

$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    // Enhance data only on POST requests
    if (originalOptions.type.toUpperCase() === 'POST'
        || options.type.toUpperCase() === 'POST'
    ) {
        var originalData = $.unserialize(originalOptions.data);
        var enhancedData = $.extend(originalData, csrfData);
        options.data = $.param(enhancedData);
    }
});