为什么我的数组变成字符串"数组[]"在这种情况下?

时间:2017-07-11 19:53:31

标签: jquery arrays post

我尝试使用jquery.post将参数items作为其值Array传递给服务器。像这样:

HTML:

总共 <span class="statistics" data-fields="Record_entries_count"></span> 条记录,
总共 <span class"statistics" data-fields="drop_count"></span> 次。

使用Javascript:

this.items = this.element.find('span.statistics').toArray().map(i=>$(i).data('fields'));
$.post('backend_server', {"items": this.items}, function(data, status, xhr){...});

然而,奇怪的是它没有正确通过。我使用开发人员的工具检查了请求标头,发现我作为items传递的内容变为items[]

这是为什么?有人可以提一下吗?非常感谢。

1 个答案:

答案 0 :(得分:2)

由于this.items是一个数组,jQuery将引入这些括号,就好像你已经完成:

$.post('backend_server', {"items[]": this.items}, ....);

你可以自己这样做,但jQuery会在你不做的时候为你做这件事。请参阅examples in the jQuery documentation

这是必需的,因为post请求支持的数据结构本质上是平坦的。它遵循"application/x-www-form-urlencoded"的HTTP规范,即URL encoding中的一个或多个parameter = value对。有关该格式的几个有趣答案,请参阅this Q&A

一致认为带有方括号的参数名称表示原始数据是一个数组。因此,每个数组值都将被编码为items[]参数的值。

多个服务器应用程序支持这种表示法,并将其再次解释为数组(例如PHP执行此操作)。如果没有,您将不得不在服务器端处理这个问题。

替代

如果您希望jQuery不修改这样的名称,您可以使用jQuery.ajaxSettings.traditional = true;更改jQuery设置。

或者,您可以将对象字符串化为JSON并将该字符串作为一个值发送:

$.post('backend_server', {"items": JSON.stringify(this.items) }, ....);

在服务器端,您必须解析该JSON。