【问题标题】:What's the difference between .serialize() and .serializeArray()?.serialize() 和 .serializeArray() 有什么区别?
【发布时间】:2012-05-12 21:59:28
【问题描述】:

我正在尝试将表单发送到控制器。 jQuery 文档说 .serializeArray() 应该发送一个 json 数组,.serialize() 应该创建一个查询字符串。

但是,当我尝试使用 IE9 F12 模式进行检查时,在这两种情况下,它看起来都像是一个查询字符串。我打过哪个电话...

我错过了什么?

【问题讨论】:

  • 在发布这个问题之前,我实际上已经看到了这一点。我还是不明白!
  • 你能给出你在调试控制台中看到的结果吗?

标签: jquery serialization serializearray


【解决方案1】:

serializeArray 创建一个数组(不是一个“json数组”——没有这样的东西);您可以使用console.log($("#myform").serializeArray()) 自行测试。另一方面,serialize 创建一个查询字符串,该字符串是 HTTP 请求的一部分。从某种意义上说,这两种表示形式是等效的,您可以使用适当的代码将一种表示转换为另一种,而不会产生任何歧义。

两个版本都可用的原因是serialize 在您只想发出 HTTP 请求时更方便(只需将结果放入查询字符串中),而serializeArray 在您想处理请求时更方便结果自己。

jQuery 的 AJAX 方法不在乎您是否给它们一个或另一个,因为它们会检测参数的类型并将其转换为查询字符串(如果它还不是一个),因此外部观察者无法发出请求告诉参数的原始格式是什么。

【讨论】:

  • 好的!但是 - 同时拥有 serialize() 和 serializeArray() 有什么意义?
  • @kaze:这就像问同时拥有跑车和旅行车有什么意义。如果您要使用它们的唯一目的是驱车前往 500m 处的购物中心,那没有什么区别,但对于大多数其他事情,您需要使用正确的工具来完成这项工作。
  • 我现在明白了。我已经在 console.log 中尝试过,我看到了不同之处。我很困惑,在我的 ajax 调用中看不到任何区别。
  • 当它不回答问题时,为什么这是公认的答案?问题是“.serialize() 和 .serializeArray() 有什么区别?”这个答案只是对 serializeArray 的作用的解释。
  • @MarkSimpson:一个创建一个数组,另一个创建一个(查询)字符串——这很清楚 IMO。我认为说“答案没有解决问题/是对serializeArray 的解释”是不公平的,因为 1)问题文本清楚地表明了 OP 想知道为什么两者似乎都这样做同样的事情和2)第二段完全解释了这一点。
猜你喜欢
  • 1970-01-01
  • 2014-05-09
  • 2011-05-13
  • 2010-10-02
  • 2011-12-12
  • 2010-09-16
  • 2012-03-14
  • 2012-02-06
  • 2011-02-25
相关资源
最近更新 更多