我想为ajax请求的所有请求主体添加一个csrf标记。 我发现以下帖子很有用:jQuery add CSRF token to all $.post() requests' data
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
options.data = $.param($.extend(originalOptions.data, { c: csrf }));
});
由于某种原因,这会超出请求体。我不懂为什么。我可以看到我在那里序列化请求主体的所有内容,但是当它提交主体时只包含c
字段。注意我使用jQuery的serialize()
方法创建表单数据可能会有所帮助。
答案 0 :(得分:1)
您找到的代码无法正常工作,因为它是专门为处理作为对象而不是param字符串传递的数据而构建的。
然而,实现此目标的更简单方法不会受到数据传递方式的影响:
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
if (options.processData && options.contentType === 'application/x-www-form-urlencoded; charset=UTF-8') {
options.data = (options.data ? options.data + '&' : '') + $.param({ c: csrf });
}
});
因此,我们不是修改原始对象并添加值,或者将param字符串转换回对象只是为了重新解析它,而是将我们想要发送的新值包装起来并将其附加到param字符串中, processData为true,并且contentType设置为default(以避免损坏其他内容类型。)