JQuery在发送时删除空数组

我有以下代码:

$.post('block_ajax.php' , { 'action': 'set_layout' , 'listid': 123 , 'layout': [] } , function(data) { // ... } ); 

接收脚本(block_ajax.php)仅接收“action”和“listid”参数。 当我检查使用Chrome发送的内容时,我看到“layout”参数甚至没有发送到后端脚本。

由于空数组与缺少数组之间存在差异,我想让JQuery发送空数组。 我可以找到一些迹象表明JQuery(1.6.1)似乎是这样做的,但不是如何阻止它这样做。 JSON格式允许空数组和空对象,所以我认为它应该是可能的。

有人知道要改变什么,所以JQuery可以发送空数组吗?

编辑:请参阅Luke的答案以获得更好的解决方案: https : //stackoverflow.com/a/31996181/827437

我已经将我之前的答案留给了下面Rails处理[""] ,正如上面的链接所解释的那样。


注意:特定于Rails

我不确定为什么你需要发送一个空白参数。 仅仅检查PHP脚本中参数的存在就足够了。 但是,如果你真的想这样做,请使用'layout': [""]而不是'layout': [] 。 应该发送参数。

(此外,您可能希望将layout重命名为layout[]以指示它是一个数组,但这是不必要的。)

我们的组织有两种解决问题的方法:

  • 将数据作为JSON而不是POST数据发送是一种很好的通用方法,尽管有时与Rails等框架集成有点困难,因为您可能必须添加显式的后端调用来解码JSON数据。
  • vinod所指出的[""]将运行良好,因为许多框架(例如Rails)通常将此视为空数组。 (因此,请参阅此Stack Overflow答案 )。
    • 注意:这在尝试与Rails的某些方面集成时有效,特别是在发送由has_many关系相关的对象ID列表时。 例如,如果你有一个foos表和一个bars表,并且foos has_many :bars through :foo_bars ,删除foo对象上所有关联的方法是传递foo: { bar_ids: [""] }

这两种方法都比预期的要糟糕,我很乐意发现一种更清洁的方法。

2018年 ,很抱歉回答旧问题,但这里有一个更好的答案恕我直言:

 var arr = []; $.post('block_ajax.php', { 'action': 'set_layout', 'listid': 123, 'layout': arr.toString() // It'll be empty string "" if array is empty, otherwise if array has value(s) it will be a string of comma-separated values }, function(data) { // ... }); 

例子:

 var layout = [].toString();// layout will be '' (empty string) var layout = [1,2,3].toString();// layout will be string with comma-separated values '1,2,3' 

在后端,无论是空字符串还是以逗号分隔的字符串, 它都会被发布 ,只需将其转换为数组即可。

后端(PHP示例):

 $layout = explode(',', $_POST['layout']); 

我认为json会在这种情况下提供帮助

在js中编码数组并发送结果然后在php中解码它

但这需要一些资源

试试这个:

 (isset($_POST['layout'])) ? $_POST['layout'] : array(); 

如果传递的数组为空,则获取一个新的空数组,否则为“real”数组。