在Javascript中正确格式化JSON数组


Properly format JSON array in Javascript

我正在编写一个简单的删除函数。此函数用于删除PHP输出的列表中的条目。这就是发生的事情:

  1. javascript选择该列表中的复选框,并获取其ID 1,2,3等
  2. 创建的数组使用JSON.stringify转换为JSON
  3. PHP获取POST并使用json_decode()对其进行解码(此操作失败)

$(document).ready(function(){
    $('.action_trash').on('click', function(){
        //Select items to trash
        var TrashItems = [];
        $('input:checked').each(function() {
            TrashItems.push($(this).attr("id"));
        });
        //Convert to JSON
        var TrashJSON = JSON.stringify(TrashItems);
        alert (TrashJSON);
        $.ajax({
            type: "POST",
            url: "pages/forms_intake/actions/trash/model_trash.php",
            data: {TrashItems:TrashItems}, 
            cache: false,
            success: function(){
                // do stuff to remove trashed elements from list.
            }
        }); 
    });     
});

我正在尝试将简单的Javascript数组转换为JSON。但是我认为JSON是无效的。当我提醒TrashJSON变量时,这是输出:["31","32"]

<?php
session_start();
include "../../../../php/config.php";
$TrashJSON = $_POST['TrashItems'];
var_dump(json_decode($TrashJSON));
//Trash items
//$TrashQuery = mysqli_query ($mysqli, "UPDATE forms_intake SET item_trashed=1 WHERE formid='$TrashInt'"); 
//Close connection
mysqli_close($mysqli);
?>

当我运行这个时,我得到了这个错误:

<br />
<b>Warning</b>:  json_decode() expects parameter 1 to be string, array given in <b>/home/nickvmf103/domains/a-training.nl/public_html/sotwebapp/pages/forms_intake/actions/trash/model_trash.php</b> on line <b>7</b><br />
NULL

根据PHP关于json_decode的手册,如果json无效,就会输出null。

所以我的问题是:如何在javascript中正确格式化JSON?这样它就可以传递给PHP并转换为PHP数组。

其他信息:当成功转换为PHP数组时,我将使用内爆在数组值之间放置"OR",将其转换为字符串,并在SQL查询WHERE语句中使用它来清除页面上检查的项。

为了让现有的PHP按照您的期望运行,您需要发送TrashJSON而不是TrashItemsTrashItems是您填充的数组,而TrashJsonTrashItems的JSON编码版本。

更改

data: {TrashItems:TrashItems},

至。。

data: {TrashItems:TrashJSON},

jQuery将TrashItems正确地解释为一个数组,从而将其作为一个值数组发送到PHP脚本。

或者,正如Barmar在评论中推断的那样,您可以简单地循环当前发布为TrashItems的值数组。您可以使用以下代码来完成此操作。

foreach ($_POST['TrashItems'] as $TrashItem) {
    echo "$TrashItem'n";
}

这将在单独的一行中输出最初传入的TrashItems数组的每个项,并提供..的输出。。

31
32