为啥我们必须通过请求对数组而不是对象进行字符串化?

Posted

技术标签:

【中文标题】为啥我们必须通过请求对数组而不是对象进行字符串化?【英文标题】:Why must we stringify arrays but not objects over requests?为什么我们必须通过请求对数组而不是对象进行字符串化? 【发布时间】:2014-09-24 15:50:10 【问题描述】:

昨晚我通过 AJAX(特别是 $.post)向我的服务器发送了一些数据,当时我遇到了 javascript 数组需要“字符串化”并在发送之前作为字段应用于对象的问题。那就是:

$.post("/myUrl/", "myKey": json.stringify(myArray), ... );

如果我不执行stringify,POST 的格式会在到达 Django 时搞砸。

当对象可以按原样发送时,为什么需要对请求进行字符串化?或者,这是否在使用的后端有很大差异?

【问题讨论】:

对象没有“按原样”发送。 jQuery 对其进行了一些处理以将其转换为 URL 键/值:http://this.url?myKey=stringifiedArray。使用对象是因为它们是一种易于操作的数据结构。 啊,有趣。所以 jQuery 只是没有对数组做同样的“东西”——或者说它对待它们的方式不同? 啊……这可以解释为什么request.POST 被分解成list[index] 位;它正在尝试从数组中创建唯一的键/值对!对吗? jQuery 的 post 方法接受键/值对的数据对象(或字符串 - 见下文)。 【参考方案1】:

对象没有“按原样”发送。 jQuery 将对象重新编码为 URL 键/值对,例如:

http://this.url?myKey=stringifiedArray.

The documentation has more information on this.

data
Type: PlainObject or String
A plain object or string that is sent to the server with the request.

使用对象是因为它们是一种易于开发人员操作的数据结构。

【讨论】:

嗯...ArrayObject,但 不是 PlainObject 是这样吗? (***.com/questions/5048371/…) 区别在于数组是一个类似列表的对象,它有数字索引并且是可排序的,而一个对象有键/值对,其中键必须是唯一的并且不能排序。 顺便说一句,MDN library 是一个很好的资源,如果你从未看过它的话。 是的,我看过 MDN 库——谢谢。 :) 我实际上只是在浏览它(developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…)。看起来最大的区别在于 plain 对象 () 与包含数组的更通用的对象类——而且似乎 jQuery 默认只处理前一种情况。有趣的!谢谢,@Andy!

以上是关于为啥我们必须通过请求对数组而不是对象进行字符串化?的主要内容,如果未能解决你的问题,请参考以下文章

Java集合类

集合类之ArrayList

Java中集合概念

java集合

集合Collection

为啥我们使用 CPU 而不是 GPU 进行光线追踪?