使用jquery扩展所有ajax帖子

时间:2015-11-20 13:48:25

标签: javascript jquery ajax

我需要使用Cookie中的csrf令牌扩展我的所有ajax帖子。 我试过跟随:

$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
        if(options.type.toUpperCase() === "POST")
        options.data = options.data || {};
        $.extend(options.data, { csrf: $.cookie('cookiename') });
    });

但它似乎没有应用于我现有的任何帖子。我的控制台返回:

阻止发布请求:没有csrf令牌参数

如果我在console.log之后:

console.log($.cookie('CSRF'), 'waah');

它记录正常。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以更改以下行:

$.extend(options.data, { csrf: $.cookie('cookiename') });

通过这个:

options.data = $.param( $.extend(originalOptions.data, { csrf: $.cookie('cookiename') }) );

注意:默认情况下,options.dataString,而不是Object,而不是originalOptions.data

希望这有帮助。

答案 1 :(得分:0)

那是因为options.data不是对象,它是查询字符串,这就是你不能合并两个对象的原因。

您应该将参数附加到查询字符串,如下所示:

$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
    if(options.type.toUpperCase() === "POST") {
        options.data += options.data ? '&' : '';
        options.data += 'csrf=' + $.cookie('CSRF');
    }
});