几天来我一直在尝试用PHP解码Javascript数组,但是没有运气。
我基本上有一个PHP while循环,该循环遍历我的SQL数据库中的所有产品,并且它在每行上弹出一个复选框,以允许用户选择1个或多个产品来通过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>
我的Javascript代码:
window.serialize = function serialize() {
var values = [].filter.call(document.getElementsByName('products[]'), function(c) {
return c.checked;
}).map(function(c) {
return c.value;
});
console.log(values);
$('#result').html(values);
}
function updateProduct(values){
$.ajax({
url: "https://tech-seo.co.uk/ecommerce/products/bulk_process_products.php",
method: "POST",
data: {array:values},
success: function(res){
}
})
}
控制台日志正确显示数据,例如
(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 <<<<<<<";
}
我总是得到'>>>>>>,当我选择产品并单击提交按钮时出现错误<<<<<<
感谢您的任何帮助。
谢谢。斯坦。
当您从values
属性调用updateProduct()
时,您没有传递onclick
数组。它需要自己获取值。
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将该格式解码为$_POST
元素中的数组。
$getArray = $_POST['products'];