jquery - $.ajaxPrefilter 覆盖请求正文

标签 jquery ajax

我想向 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/

相关文章:

jquery - 退出 jquery live

jquery - 选择器宽度高度自动设置为 0px 后仅适用于 windows chrome

jquery - 使用 css3 的过渡动画 - 打开和关闭

jquery - ASP.NET PageMethods 和 JQuery AJAX Post – 它到底有多安全?

c# - 在与请求匹配的 Controller 上未找到任何操作

javascript - 处理来自页面上多个元素的输入

jQuery .hide() 和 .show() 不必要地应用于 div

c# - 尝试使用 ASP.NET MVC 从 Kendo UI Grid 中的子网格重定向时出错

javascript - 为 jquery 构建动态规则从 php 数组验证

javascript - 如何在按下/按住按钮期间发送值