我将通过AJAX将对象数组插入mysql,但是在服务器端json_decode()
返回null
我该如何解决?
这是ajax代码:
let mainObj = [
{ username: 'david', password: 33456, email: 'david@gmail.com' },
{ username: 'rose', password: 3333, email: 'rose@gmail.com' },
{ username: 'adam', password: 95112, email: 'adam@gmail.com' },
{ username: 'lisa', password: 'sarlak', email: 'lisa@gmail.com' },
]
let sendMe = JSON.stringify(mainObj);
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
document.getElementById('result').innerHTML = xhr.responseText;
}
}
xhr.open("GET", "check.php?x=" + sendMe, true);
xhr.send();
以及php代码(check.php):
$obj= json_decode($_GET['x'], true);
$b= $obj[1]->username;
var_dump($b);
它返回null
,但我需要它返回在数据库中可用的对象数组。
答案 0 :(得分:1)
您正在尝试将数组视为对象,json_decode
返回的数组不是对象或stdclass ...而不是
$b= $obj[1]->username;
应该是
$b= $obj[1]['username'];
我假设您没有使用任何框架,因为您应该做的事情应该抛出异常,因此最好启用错误报告
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
答案 1 :(得分:1)
由于您在true
中使用第二个参数$obj= json_decode($_GET['x'], true);
,因此返回的$obj
将是一个数组。您可以使用:
$obj = json_decode($_GET['x']);
$b = $obj[1]->username;
或
$obj = json_decode($_GET['x'], true);
$b = $obj[1]['username'];
得到“玫瑰”。
答案 2 :(得分:1)
类似这样的东西(其他人已经写了..):
$json = '[{"username":"david","password":33456,"email":"david@gmail.com"},{"username":"rose","password":3333,"email":"rose@gmail.com"},{"username":"adam","password":95112,"email":"adam@gmail.com"},{"username":"lisa","password":"sarlak","email":"lisa@gmail.com"}]';
$decodedJson = json_decode($json, true);
// $b= $decodedJson[1]->username; // Wrong, you have an array, not object
// Correct
foreach($decodedJson as $single) {
print_r($single["username"]."\n");
}
//打印出:
david rose adam lisa