将JSON字符串传递给PHP时,返回值为NULL

时间:2012-11-21 11:54:41

标签: php javascript json

我正在学习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 个答案:

答案 0 :(得分:0)

一个。删除标题的东西
湾将密钥更改为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);
      }
});

答案 1 :(得分: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;

答案 2 :(得分: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数组。

答案 3 :(得分: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"})