我想向 ajax 请求的所有请求主体添加 csrf token 。 我发现以下帖子很有用: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()
方法创建表单数据可能会有所帮助。
最佳答案
您发现的代码不起作用,因为它是专门为处理作为对象而不是参数字符串传入的数据而构建的。
但是,有一种更简单的方法可以实现此目标,并且不会受到数据传入方式的影响:
$.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 });
}
});
因此,我们不是修改原始对象并添加值,或者将参数字符串转换回对象只是为了重新解析它,而是传递我们想要发送的新值并将其附加到参数字符串,前提是processData 为 true 并且 contentType 设置为默认值(以避免破坏其他内容类型。)
关于jquery - $.ajaxPrefilter 覆盖请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34007432/