【问题标题】:Properly format JSON array in Javascript在 Javascript 中正确格式化 JSON 数组
【发布时间】:2014-08-29 12:34:49
【问题描述】:

我正在编写一个简单的删除函数。此函数删除 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

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

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

附加信息: 成功转换为 PHP 数组后,我将使用 implode 在数组值之间放置“OR”,将其转换为字符串并在我的 SQL 查询 WHERE 语句中使用它来丢弃在我的页面上检查的项目。

【问题讨论】:

  • 从 jQuery 向 PHP 发送数组时不需要使用 JSON。如果你发送数组,jQuery 会对其进行正确的 URL 编码,PHP 会自动对其进行解码。
  • 非常正确 - 我已经稍微扩展了我的答案以包含该选项。

标签: javascript php jquery arrays json


【解决方案1】:

为了使现有的 PHP 以您期望的方式运行,您需要发送 TrashJSON 而不是 TrashItems。 TrashItems 是您填充的数组,而 TrashJson 是 TrashItems 的 JSON 编码版本。

改变

data: {TrashItems:TrashItems},

到..

data: {TrashItems:TrashJSON},

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

或者,正如 Barmar 在 cmets 中推断的那样,您可以简单地遍历当前发布为 TrashItems 的值数组。您可以使用以下代码执行此操作。

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

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

31
32

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 2021-04-24
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多