我尝试使用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[]
。
这是为什么?有人可以提一下吗?非常感谢。
答案 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。