0

我正在学习 JSON。我已经四处阅读以找到解决我可能做错的方法,但我真的找不到它。我正在尝试将 JSON strnig 传递给 PHP 并查看它返回的内容......无论我做什么,我当前的代码总是返回 null。我觉得我正在尽一切努力让它发挥作用。但显然我一定错过了什么

谁能告诉我为什么$arrayData总是返回NULL

我可以看到当前发布的是mydata=%7B%22name%22%3A%22yes%22%2C%22regno%22%3A%22hola%22%7D 如果我不使用JSON.stringify(),那么我会看到数据发送为mydata=[object Object]

PHP

<?php
$mydata = $_POST['mydata'];
$arrayData = json_decode($mydata);
var_dump($arrayData);
 ?>

HTML

<script>
function lol () {
            var name = "yes";
            var regno = "hola";
            var arrayData = {"name":name,"regno":regno};
            console.log(arrayData);

            $.ajax({  
                      url: "algo2.php"
                      ,type: "POST"
                      ,headers: {'Content-Type': 'application/json',}
                      ,data: {'mydata=' : JSON.stringify(arrayData)}
                      ,success : function(response) {                            
                        alert(response);            
                      }
                      ,error: function (xhr, ajaxOptions, thrownError) {
                        alert(thrownError);
                      }
                });
}

</script>
</head>
<button onclick="lol()">Try it</button>

选项 2

function lol () {
            var name = "yes";
            var regno = "hola";
            var arrayData = {"name":name,"regno":regno};
            console.log(arrayData);
            console.log(JSON.stringify(arrayData)); 
            $.ajax({  
                      url: "algo2.php"
                      ,type: "POST"
                      ,data: 'mydata=' + arrayData
                      ,success : function(response) {                            
                        alert(response);            
                      }
                      ,error: function (xhr, ajaxOptions, thrownError) {
                        alert(thrownError);
                      }
                });
}
4

4 回答 4

0

一个。删除标题
b. 将密钥更改为mydata不带等号

var name = "yes";
var regno = "hola";
var arrayData = {"name":name,"regno":regno};

$.ajax({  
      url: "index.php"
      ,type: "POST"
      ,data: {'mydata' : JSON.stringify(arrayData)}
      ,success : function(response) {                            
        //alert(response);            
      }
      ,error: function (xhr, ajaxOptions, thrownError) {
        //alert(thrownError);
      }
});
于 2012-11-21T11:56:13.203 回答
0

如果要将 JSON 发送到 php,则需要读取原始输入,如下所示:

$input = file_get_contents("php://input");
if (!empty($input)) {
    $arrayData = json_decode($input, true);
    var_dump($arrayData);
}

同样在 jquery 中,我将它用于 json 请求:

$.ajaxSetup({ dataType:"json", mimeType:"application/json", contentType:"application/json"})
于 2012-11-21T12:12:50.417 回答
0

urldecode()如果您将数据字符串化,则 需要先获取数据:

$mydata="%7B%22name%22%3A%22yes%22%2C%22regno%22%3A%22hola%22%7D";
$json= urldecode($mydata);
$array = json_decode($json, true); //use the argument true if you want the object to be returned as an Associative array
print_r($array);

如果你不使用 json_decode() 中的第二个参数,它将作为对象返回:

$mydata="%7B%22name%22%3A%22yes%22%2C%22regno%22%3A%22hola%22%7D";
$json= urldecode($mydata);
$object = json_decode($json);
echo $object->name;
于 2012-11-21T12:01:22.753 回答
0
mydata=%7B%22name%22%3A%22yes%22%2C%22regno%22%3A%22hola%22%7D

这是application/x-www-form-urlencoded数据,不是application/json数据。然而,您在标题中指定它是 JSON 数据。PHP 不会解码该数据,也不会填充$_POST数组。

发送带有 JSON 标头的实际 JSON 数据并自己解码(来自php://input),或者省略标头,发送 urlencoded 数据(如您所愿)并让 PHP 填充$_POST数组。

于 2012-11-21T12:09:30.727 回答