使用jQuery post或类似的异步JavaScript请求向服务器发送空数组


Sending empty arrays to the server using jQuery post or similar Asynchronous JavaScript request

给定

$.post('dealWithStuff.php',{'fullArray':['hello','goodby'],'emptyArray':[]});

dealWithStuff.php接收

['fullArray'=>['hello','goodby'] ]

但不是

['fullArray'=>['hello','goodby'], 'emptyArray'=>[] ]

如何将emptyArray发送到服务器?

我来破解一下。

就在我们开始之前,This would be a good question for you to read over.

不能发送空数组,因为它看起来像这样:file.php?arra[]

发送时需要这样做:

$.post('dealWithStuff.php',{'fullArray':['hello','goodby'],'emptyArray':['']});

注意到emptyArray是如何['']而不是[]的?这会给你一个看起来像这样的回应:

Array
(
    [fullArray] => Array
        (
            [0] => hello
            [1] => goodby
        )
    [emptyArray] => Array
        (
            [0] => 
        )
)

您可以从后端访问它,只需从emptyArray中删除该子数组元素即可。

用这样的东西很容易做到:

foreach($_POST['emptyArray'] as $i => $derp) {
    unset($_POST['emptyArray'][$i]);
}

假设您不想要emptyArray中的任何项目。之后,您将获得如下回报:

Array
(
    [fullArray] => Array
        (
            [0] => hello
            [1] => goodby
        )
    [emptyArray] => Array
        (
        )
)

使用null,这是JSON中的合法值。

出于好奇,为什么要向服务器发送一个空数组?您只需要检查服务器端是否设置了数组。(isset((for php(

发送一个空数组实际上没有意义。想想浏览器会向服务器发送什么。发送给您的邮件的数据将是:

fullArray[]:hello
fullArray[]:goodby

在PHP中可以翻译为:

$_POST['fullArray'] = array(0 => "hello", 1 => "goodby");

但如果你要发送

emptyArray[]:

它将被视为一个空字符串值,您将得到如下内容:

$_POST['emptyArray'] = array(0 => "");

这可能不是您想要的(也不是jQuery所做的(。如果可能,请更改后端以检测密钥的存在。