我有以下代码:
$.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可以发送空数组吗?
答案 0 :(得分:9)
我们的组织有两种解决问题的方法:
[""]
将会运作良好,因为许多框架(例如Rails)通常会将其视为空数组。 (因此,请参阅this Stack Overflow answer)。
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[]
以表明它是一个数组,但这是不必要的。)