更新jQuery版本已经破坏了ajax加载

时间:2011-11-17 18:47:49

标签: jquery asp.net-mvc

我有一个使用jQuery 1.3.2的ASP.NET MVC应用程序。

在几个页面上有一个网格,可让您选择多个项目,然后调用.load加载项目的详细信息。

this.$container.load(this.url, data, function() {
    // Show results
});

data包含名为s的数组,其中包含所选的ID。

s = [ "2", "1" ]

使用jQuery 1.3.2,data将发布为

s   2
s   1

发送到

public ActionResult SomeAction(object[] s)

一切都很好。

我尝试将jQuery库更改为更新版本(1.5.1),现在我的控制器没有收到s的值,因为jQuery正在发布data,如下所示:

s[]   2
s[]   1

我是否需要分配索引以便控制器接收值(s[1], s[2])?我是否需要更改控制器操作的签名或生成数组的方式?现在,生成数据的javascript就是

var s = new Array();
for (var id in this._selected) {
  // Some checks
  s.push(id);
}

1 个答案:

答案 0 :(得分:2)

如果它在1.3.2中有效,您应该能够通过设置jQuery.ajaxSettings.traditional = true恢复旧行为。这是jQuery 1.4的一个变化,这个设置允许向后兼容。

有关详细信息,请参阅the manual entry for $.param

使用您的示例数据:

var data = {s: ["2", "1"]};

// jQuery 1.7
$.param(data); // "s%5B%5D=2&s%5B%5D=1"
jQuery.ajaxSettings.traditional = true;
$.param(data); // "s=2&s=1"

// jQuery 1.3.2
$.param(data); // "s=2&s=1"