如何通过ajax将JSON函数作为数据传递和检索到PHP?

时间:2016-04-06 14:39:01

标签: javascript php jquery json ajax

我正在购物车上工作。现在我需要将添加到购物车中的对象数组传递给php页面,以便插入到数据库中。

console.log(localStorage.getItem("shoppingCart"));

以上注销,以下内容:

[{"name":"Banana","price":1.33,"count":5},{"name":"Apple","price":1.22,"count":5},{"name":"Shoe","price":22.33,"count":1}]

现在我试图将这个JSON字符串传递给名为submit_cart.php的php页面并正确检索php页面中的字符串,我该怎么做?目前它正在发送和接收空数据。

$("#submit-cart").click(function(event){
                console.log("****TEST LOG ***");
                console.log(localStorage.getItem("shoppingCart"));
                var data = localStorage.getItem("shoppingCart");
                $.ajax({
                  type: "POST",
                  dataType: "json",
                  url: "submit_cart.php",
                  data: data,
                  success: function(data) {
                    console.log("******success******");
                    console.log(data);//this logs []
                  }
                 });
            });

在submit_cart.php中

<?php
$return = $_POST;
$return["json"] = json_encode($return);
$data = json_decode($return["json"], true);

echo json_encode($return["json"]);
  ?>

作为建议的答案编辑并且它现在正在工作:

$("#submit-cart").click(function(event){
                console.log("****TEST LOG ***");
                console.log(localStorage.getItem("shoppingCart"));
                var data = localStorage.getItem("shoppingCart");

            $.ajax({
            type: "POST",
            dataType: "json",
            contentType: 'application/json',
            url: "submit_cart.php",
            data: data,
            success: function(data) {
            console.log("******success******");
            console.log(data);//this logs []
            }
            });
            });

在submit_cart.php中

<?php
$_POST = json_decode(file_get_contents('php://input'),true);

print_r($_POST);
  ?>

4 个答案:

答案 0 :(得分:1)

在ajax请求上将内容类型设置为json,在php端从php:// input

读取json
$.ajax({
  type: "POST",
  dataType: "json",
  contentType: 'application/json',
  url: "submit_cart.php",
  data: data,
  success: function(data) {
    console.log("******success******");
    console.log(data);//this logs []
  }
});
$_POST = json_decode(file_get_contents('php://input'),true);
// then use post as usual

答案 1 :(得分:1)

如果您想从$_POST获取值,则两者都是错误的。您需要将键值对发送到服务器,然后您可以通过这些键在$_POST中访问它们。

要发送1变量中的所有内容,您可以执行以下操作:

...
var data = {json: localStorage.getItem("shoppingCart")};
...

请注意,发送对象总是一个好主意,因为jQuery将在您使用对象时正确编码数据。

然后你可以在php中得到它:

// you only need this, no additional encoding / decoding
$data = json_decode($_POST["json"], true);

答案 2 :(得分:0)

您的数据已按照您在问题console.log(localStorage.getItem("shoppingCart"));

中提及的方式编码

输出

[{"name":"Banana","price":1.33,"count":5},{"name":"Apple","price":1.22,"count":5},{"name":"Shoe","price":22.33,"count":1}]

所以在你的ajax请求中

data: { json_data:data} ,

在这种情况下,数据作为对象工作,并且很容易获取值。

并在php文件中

echo $_POST["json_data"];

答案 3 :(得分:0)

你不是在这里向目标页面发送任何数据。在ajax中发送数据与data:parameter.Then而不是使用success函数使用ajax之外的.done()函数。完成函数在结果处理。您可以使用开发人员工具网络检查您的数据是否正在传输。显示所有请求和响应数据。希望这可以解决问题。