首页 > 解决方案 > 将 json 发送到 php (jquery)

问题描述

我正在尝试将通过json.stringifyhtml 表的进程获得的 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,我的警报中就没有任何东西?

怎么了?

标签: phpjqueryjson

解决方案


首先,您需要使用名称发布数据,更具体地说,使用名称“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[]'});
?>

推荐阅读