【问题标题】:PHP read JSON-POST-Request and send them backPHP 读取 JSON-POST-Request 并将它们发回
【发布时间】:2013-04-19 14:23:33
【问题描述】:

我尝试使用 PHP 读取 JSON-POST-Request,但出现以下错误。

请求失败:解析器错误

这是我的代码

    <script type="text/javascript" charset="utf-8" src="resources/js/model/Product.js"></script>
<script>
    function getdetails(){

        var p = new Product(15,11.5,"Pizza Test","P");
        var z = new Product(68,1.5,"Zutate Test","Z");

        p.addOneProduct(z);

        var request = $.ajax({
            type: "POST",
            url: "yb_test_post.php",
            dataType: "json",
            data: JSON.stringify(p)
        });

        request.done(function(msg) {
            $("#msg").html( " Post parameter are: <br/>"+msg );
        });

        request.fail(function(jqXHR, textStatus) {
            alert( "Request failed: " + textStatus );
        });
    }
</script>

和我的 PHP 代码,我尝试读取 POST 请求并立即打印

    <table>
<?php


    foreach ($_POST as $key => $value) {
        echo "<tr>";
        echo "<td>";
        echo $key;
        echo "</td>";
        echo "<td>";
        echo $value;
        echo "</td>";
        echo "</tr>";
    }


?>
</table>

我做错了什么?

产品.js

function Product(id, price, name, type){
    this.id = id;
    this.price = +price;
    this.totalPrice = +price;
    this.name = name;
    this.type = type;
    this.products = [];
    var self = this;

    this.addOneProduct = function(oneProduct){
        self.products.push(oneProduct);
        self.totalPrice= self.totalPrice+oneProduct.price;
    };
}

【问题讨论】:

    标签: php jquery json post


    【解决方案1】:

    你正在做data: JSON.stringify(p)。这是发送一个 JSON 字符串作为帖子正文。你不想要这个。 PHP 不会自动为您解析。您想向 PHP 发送一个查询字符串,这将使 PHP 自动将其解析为 $_POST 数组。

    丢掉JSON.stringify,试试这个:data: p

    另外,dataType: "json"响应Content-type,而不是 请求。你的 PHP 正在发回 HTML,所以你想要:dataType: "html"

    var request = $.ajax({
        type: "POST",
        url: "yb_test_post.php",
        dataType: "html",
        data: p
    });
    

    【讨论】:

    • 我试过了,但现在我在 Web 控制台 TypeError 中收到以下错误消息:oneProduct is undefined self.totalPrice= self.totalPrice+oneProduct.price;
    • @user1167253:我害怕那个。序列化时,jQuery 会调用函数来获取它们的值。要解决此问题,请将if(!oneProduct){ return '';} 添加为addOneProduct 的第一行。
    • 谢谢,它的工作。但发送格式不是 JSON。我如何发送到 PHP JSON?
    • @user1167253:为什么要以 JSON 格式发送?最好将其作为查询字符串发送。如果您这样做,$_POST 将自动填充。如果您想要 JSON,则必须手动解析它(如果您真的想要,我可以向您展示如何做到这一点)。
    • 我可以作为查询字符串发送,这并不重要。对我来说主要的是我很容易将我在服务器上获得的数据转换为对象。 PHP中有解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多