$ .extend忽略'传统'标志

时间:2013-10-08 07:32:17

标签: ajax jquery

我正在使用ASP.NET MVC4应用程序,因此,必须使用traditional选项发送通过ajax发送到服务器的所有数组数据。 (对于POST变量没有[]。)

问题是,我还有一个过滤器设置,需要在每次ajax POST时发送AntiforgeryToken。

我已经使用ajaxPrefilter这样解决了这个问题:

$.ajaxPrefilter(function (options, originalOptions) {
  if (options.type.toUpperCase() == "POST") {
    options.data = $.param($.extend(originalOptions.data, { __RequestVerificationToken: "antiForgeryToken" }));
  }
});

这很好用,并将__RequestVerificationToken添加到所有POST。 但是,它也会导致我的数据不能根据traditional标志进行参数化。

有人知道如何修改我的前置过滤器以解决这个问题吗?

示例可以在这里找到: http://jsbin.com/IxoKIKA/2/edit

1 个答案:

答案 0 :(得分:2)

您忘记将traditional参数传递给$.param()。你应该写:

options.data = $.param($.extend(originalOptions.data, {
    __RequestVerificationToken: "antiForgeryToken"
}), true);