我正在学习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);
}
});
}
答案 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"})