我需要使用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');
它记录正常。有什么想法吗?
答案 0 :(得分:1)
您可以更改以下行:
$.extend(options.data, { csrf: $.cookie('cookiename') });
通过这个:
options.data = $.param( $.extend(originalOptions.data, { csrf: $.cookie('cookiename') }) );
注意:默认情况下,options.data
为String
,而不是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');
}
});