php - 将 json 发送到 php (jquery)
问题描述
我正在尝试将通过json.stringify
html 表的进程获得的 Json 传递给 php 文件以将其插入数据库。首先,要检查以下代码是否正常:在发出“myjson”警报时,我得到了正确的 json 输出:
var myjson= JSON.stringify(mydata);
alert(myjson);
[{},{"product[]":"john","qty[]":"288","price[]":"199","total[]":"57312"},{"product[]":"sylvia","qty[]":"12","price[]":"13","total[]":"156"},{"product[]":"juan","qty[]":"11","price[]":"9","total[]":"99"},{"total_amount":"57567.00"}]
然后我有这个 ajax 将它发送到 php (test.php):
$.ajax({
url: "test.php",
type: "POST",
data: myjson,
dataType: "JSON",
success: function (data) {
alert(data);
}
});
我的 php 文件检查输出是否正常:
$obj = json_decode($_POST["mydata"]);
echo $obj->var;
但是一旦应该处理了php,我的警报中就没有任何东西?
怎么了?
解决方案
首先,您需要使用名称发布数据,更具体地说,使用名称“mydata”。
目前 PHP 正在寻找一个名为 mydata ($_POST["mydata"]) 的帖子,该帖子不可用并抛出以下通知 Undefined index: mydata
为此,您可以更改要发送的数据:
data: myjson
至
data: {"mydata": myjson}
二、发给后端的数据是对象数组
Array
(
[0] => stdClass Object
(
)
[1] => stdClass Object
(
[product[]] => john
[qty[]] => 288
[price[]] => 199
[total[]] => 57312
)
[2] => stdClass Object
(
[product[]] => sylvia
[qty[]] => 12
[price[]] => 13
[total[]] => 156
)
[3] => stdClass Object
(
[product[]] => juan
[qty[]] => 11
[price[]] => 9
[total[]] => 99
)
[4] => stdClass Object
(
[total_amount] => 57567.00
)
)
您将需要通过索引访问它们或遍历数组。
通过索引访问它们:$obj[0]->var
或$obj[1]->var
最后但并非最不重要的一点是,属性包含方括号{"product[]":"john","qty[]":"288","price[]":"199","total[]":"57312"}
,不推荐使用,但仍然可以使用。访问属性应该像这样:$obj[1]->{'property[]'}
JavaScript:
<script type="text/javascript">
function sendAjax(){
var mydata = [{}, {"product[]":"john","qty[]":"288","price[]":"199","total[]":"57312"}, {"product[]":"sylvia","qty[]":"12","price[]":"13","total[]":"156"},{"product[]":"juan","qty[]":"11","price[]":"9","total[]":"99"},{"total_amount":"57567.00"}]
var myjson = JSON.stringify(mydata);
$.ajax({
url: "test.php",
type: "POST",
data: {"mydata": myjson},
dataType: "JSON",
success: function (data) {
alert(data);
}
});
}
</script>
PHP:
<?php
$obj = json_decode($_POST["mydata"]);
echo $obj[1]->{'product[]'};
?>
更新:
AJAX 期待 JSON 响应,否则它将失败。在后端,您需要将响应更改为 JSON。
<?php
$obj = json_decode($_POST["mydata"]);
header('Content-Type: application/json');
echo json_encode($obj[1]->{'product[]'});
?>