JQuery在发送时删除空数组

时间:2011-07-08 09:03:06

标签: jquery ajax arrays object

我有以下代码:

$.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可以发送空数组吗?

7 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:2)

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']);

答案 2 :(得分:0)

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

以js编码数组并发送结果然后在php

中解码

但这需要一些资源

答案 3 :(得分:0)

我通过以下方式解决了这一问题,我认为这是最容易阅读的方法。假设有一个数组myArray可以填充或为空:

'requestParam': myArray.length === 0 ? '' : myArray

即使为空,jQuery也不会省略requestParam参数。

答案 4 :(得分:0)

我发现一个简单的作弊方法

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

注意,我将空数组定义为[{}]。 jQuery ajax命令只是发送一个空数组而没有空对象。

注意:[[]]不起作用。

答案 5 :(得分:-1)

试试这个:

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

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

答案 6 :(得分:-5)

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

我已经将上一个回答专门针对Rails如何处理[""],如上面的链接所解释的那样。


注意:特定于Rails

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

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