其中包含php和javascript的一个php文件。我在javascript部分定义了一个多维数组。我可以在控制台中看到“键”和“值”的正确输出,但是提交表单后我没有将数组放入php。我做错了吗?
<?php
echo "Postcmd: ".$_POST["postcmd"];
print_r($_POST["postcmd"]);
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript">
var postcmd =[];
var key;
function formsubmitplus(ele) {
postcmd.push({"key": ele.id, "value": ele.value});
for (key in postcmd) {
if (postcmd.hasOwnProperty(key)) {
console.log(postcmd[key])
}
}
request = $.ajax({
url: "/index.php",
type: "post",
data: postcmd
});
}
</script>
根据jQuery文档,
要发送到服务器的数据。如果还不是字符串,则将其转换为查询字符串。它被附加到GET请求的URL上。请参阅processData选项以防止这种自动处理。对象必须是键/值对。如果value是一个Array,则jQuery会根据传统设置的值使用相同的键序列化多个值(如下所述)。
因此,您的data
字段必须包含一个对象(例如{foo: bar, foo_again: bar_again}
;在PHP中,它将被读取为$_POST['foo'] == "bar"
)。但是,您的代码提交了一个包含一个元素的数组:指定的对象。另外,PHP不会神奇地将您的JS数组/对象转换为PHP数组。您必须解析传递到PHP的字符串,并将其转换为所需的数组。
如果打印$_POST
,则可以看到确切传递给PHP的内容。这可以帮助您了解正在发生的事情。