在Javascript中正确格式化JSON数组

时间:2014-08-29 12:34:50

标签: javascript php jquery arrays json

我正在写一个简单的删除功能。此函数删除PHP正在输出的列表中的条目。这就是:

  1. javascript选择此列表中的复选框并获取其ID 1,2,3etc。
  2. 使用JSON.stringify
  3. 将创建的数组转换为JSON
  4. PHP获取POST并使用json_decode()对此进行解码(此操作失败)
  5. $(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
    

    根据json_decode上的PHP手册,如果JSON无效,则输出null。

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

    其他信息: 当成功转换为PHP数组时,我将使用implode来放置&#34;或者&#34;在数组值之间,将其转换为字符串并在我的SQL查询WHERE语句中使用它来删除在我的页面上检查的项目。

1 个答案:

答案 0 :(得分:1)

为了使现有的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