JQuery在发送时删除空数组

Mar*_*Lee 22 arrays ajax jquery object

我有以下代码:

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

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

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

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

Luk*_*per 9

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

  • 将数据作为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: [""] }.

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


vin*_*nod -4

编辑:请参阅卢克的答案以获得更好的解决方案:/sf/answers/2239732701/

[""]正如上面的链接所解释的,我已经留下了之前针对 Rails 如何处理的具体答案。


注意:特定于 Rails

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

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

  • 这不是答案——现在您正在发送一个带有假值的非空数组,这将导致更多的后端编码来解释这种情况。如果我们不能真正发送一个空数组,那么在背面进行一个简单的测试来检查 parm 是否存在(其他人可能已经建议了),这样可以更干净地处理整个问题。 (2认同)