【发布时间】:2023-03-27 03:44:01
【问题描述】:
我想为 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() 方法创建表单数据。
【问题讨论】:
-
可能是因为
originalOptions.data在使用 .serialize() 时是一个字符串。如果您改为使用一个对象,它将起作用。您也可以使用 .serializeArray(),但您必须修改预过滤器以添加属性,使其与 serializeArray 的输出相匹配。 -
如果提供的数据不一致,这样的功能怎么可能工作
-
测试它是否是一个字符串,如果是,将它转换回一个对象,添加你的参数,然后重新字符串化它。不过,祝 JSON 或 XML 帖子正文好运。