在Javascript中正确格式化JSON数组

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

  1. javascript选中此列表中的复选框并获取其ID 1,2,3etc。
  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”]

  

当我运行它时,我收到此错误:

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

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

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

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

为了使现有PHP能够按预期运行,您需要发送TrashJSON而不是TrashItemsTrashItems是您填充的数组,而TrashJsonTrashJson的JSON编码版本。

更改

 data: {TrashItems:TrashItems}, 

至..

 data: {TrashItems:TrashJSON}, 

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

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

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

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

 31 32