当传统和异步是假的时候,混淆了$ .ajax()

时间:2012-10-12 17:28:08

标签: ajax jquery

我有以下代码:

var params = {
  task: task,
  pk: pk,
  rk: rk,
  responses: null
}

var resp = [];
$(".city-checkbox").each(function () {
  var i = parseInt(this.id.match(/\d+/)[0], 10);
  resp[i] = this.checked;
});
parms.responses = resp;

$.ajax({
  type: "POST",
  traditional: true,
  async: false,
  data: parms,
  dataType: "json",

  [...]
});

我的代码向ASP MVC操作发送POST请求。我查看了jQuery文档,但仍然无法理解传统的做法。有人可以解释我是否真的需要在这里使用它。

与async false相同:它有什么不利之处吗?

1 个答案:

答案 0 :(得分:4)

traditional的文档实际上已在jQuery.param

  

从jQuery 1.4开始,$.param()方法递归地序列化深层对象,以适应现代脚本语言和框架,如PHP和Ruby on Rails。您可以通过设置jQuery.ajaxSettings.traditional = true;来全局禁用此功能。

是否要使用该标志取决于后端如何反序列化参数。除非您遇到麻烦,否则您可能希望坚持使用默认值false - 但我可能错了。你应该在你的特定环境中测试它。


更新 - 正如凯文所说,除非你真的知道自己在做什么,否则你应该从不使用async: false因为它会阻止用户的浏览器直到AJAX调用完成。你无法控制这一点。更好的方法是使用默认的async: true并显示旋转的GIF等,以便自己阻止UI并让用户知道他们需要等待。