用PHP解码javascript数组

用PHP解码javascript数组,javascript,php,html,json,Javascript,Php,Html,Json,几天来,我一直在尝试用PHP解码Javascript数组,但运气不佳 我基本上有一个PHP while循环,它在SQL数据库中的所有产品中循环,并在每行弹出一个复选框,允许用户通过PHP脚本选择一个或多个要操作的产品 我的HTML表单是: <div class="error_box"><?php echo $_SESSION['newdata']; ?></div> <div class="error_box"><?php echo $_SE

几天来,我一直在尝试用PHP解码Javascript数组,但运气不佳

我基本上有一个PHP while循环,它在SQL数据库中的所有产品中循环,并在每行弹出一个复选框,允许用户通过PHP脚本选择一个或多个要操作的产品

我的HTML表单是:

<div class="error_box"><?php echo $_SESSION['newdata']; ?></div>
<div class="error_box"><?php echo $_SESSION['errordata']; ?></div>
<form>
<input type='submit' value='Bulk update products -->' id='bulk-change-products' onClick='updateProduct()'>
<input type='checkbox' name='products[]' id='serialized' value='$product_no' onclick='serialize()'>
</form>
控制台日志正确显示数据,例如

(2) ["1", "2"]
0: "1"
1: "2"
length: 2
使用AJAX发布后我的php代码:

session_start();

 $getArray = json_decode($_POST['data']);

// checking if data exists
if ($getArray != null ){
    $_SESSION['newdata'] = "Success!";
}else{
    // either of the values doesn't exist
   $_SESSION['errordata'] = ">>>>>>  There was an error  <<<<<<<";
}
我总是得到“>>>当您从onclick属性调用updateProduct时,出现了一个错误您没有传递值数组。它需要获取自身的值

function updateProduct() {
  var values = $("input[name='products[]']:checked").map((i, el) => el.value).get();
  $.ajax({
    url: "https://tech-seo.co.uk/ecommerce/products/bulk_process_products.php",
    method: "POST",
    data: {
      products: values
    },
    success: function(res) {
    }
  })
}
如果在data:选项中传递数组,则不需要在PHP中使用json_decode。jQuery将使用URL编码的格式发送参数,PHP将该格式解码为$\u POST元素中的数组


您有数据:{array:values}您的数组位于数组键而非数据键中,例如您将使用$\u POST['array']onClick='updateProduct'您没有将value参数传递给函数。您在PHP中调用json\u decode,但在JavaScript中从未调用json.stringify。你期望JSON从哪里来?我现在使用了stringify var newvalues=JSON.stringifyvalues;console.lognewvalues;$'结果:HtmlNewValue;现在的结果是[1,2,3]。我不确定我是否理解values参数?感谢这个Barmar,我知道我遗漏了一些东西,现在我可以通过$getArray=$\u POST['products']回显数组的值;谢谢你。我有一个奇怪的问题,第一次点击按钮时数据没有返回,似乎总是第二次点击,有什么想法吗?@StanHowe你没有做任何事情来阻止updateProduct函数中的事件默认操作,所以你的表单将提交,因为你在点击提交按钮…我添加了一个if语句,以确保至少选择了一个产品,但在我在页面上发出警报后,它会加载一个新的URL,其中包含?最后,有什么想法吗?将输入更改为type=button,这样它就不会提交表单。
function updateProduct() {
  var values = $("input[name='products[]']:checked").map((i, el) => el.value).get();
  $.ajax({
    url: "https://tech-seo.co.uk/ecommerce/products/bulk_process_products.php",
    method: "POST",
    data: {
      products: values
    },
    success: function(res) {
    }
  })
}
$getArray = $_POST['products'];