Javascript PHP+;JS+;AJAX:JSON中的意外标记{
在尝试通过Javascript PHP+;JS+;AJAX:JSON中的意外标记{,javascript,php,json,ajax,Javascript,Php,Json,Ajax,在尝试通过AJAX从GET请求返回一些数据时,我不断收到一条令人讨厌的错误消息…JSON中的意外标记…,我可以清楚地看到它的来源。请注意,只有当我从数据库返回多个(1)项时才会发生这种情况。如果我只有一个(1)项目我可以访问它数据.id,数据.user\u name,等等 { "id":"39", "user_id":"19", "user_name":"Brandon", "content":"Second Post", "date_created":"201
AJAX
从GET
请求返回一些数据时,我不断收到一条令人讨厌的错误消息…JSON中的意外标记…
,我可以清楚地看到它的来源。请注意,只有当我从数据库返回多个(1)项时才会发生这种情况。如果我只有一个(1)项目我可以访问它数据.id
,数据.user\u name
,等等
{
"id":"39",
"user_id":"19",
"user_name":"Brandon",
"content":"Second Post",
"date_created":"2018-01-24 21:41:15"
}/* NEEDS TO BE A ',' RIGHT HERE */ {
"id":"37",
"user_id":"19",
"user_name":"Brandon",
"content":"First",
"date_created":"2018-01-24 15:19:28"
}
但我不知道如何修复它。处理数据、数组和对象是我尚未掌握的艺术形式
JAVASCRIPT(AJAX)
PHP(这就是数据的来源)
代码失败的原因是您正在使用
echo json_encode($row);
这将为每一行回显一个数组,但它不是有效的JSON
这是正确的,因为数组只包含一个项。示例中,您可以通过data.0.id、data.1.id、data.2.id等访问它,因为每一行都在自己的数组中。您只能打印一次,例如数据“包”您将从中相应地引用客户端上的项目。但在代码中,您实际上为每一行打印了一个数据“包”
解决方案是创建一个数组并将所有获取的数据保存到其中,然后对数组进行json编码并打印
if ($result) {
// Save the fetched data into an array (all at once).
$fetchedData = $query->fetchAll(PDO::FETCH_ASSOC);
// Json-encode the whole array - once.
// header('Content-Type: application/json;charset=UTF-8');
echo json_encode($fetchedData);
} else {
echo 'NO POSTS TO DISPLAY';
}
你的问题与jQuery无关。你的问题是你的JSON无效。JSON必须是单个对象。你需要一个数组。对,我不是说jQuery,只是澄清我想要一个简单的JavaScript解决方案/解释。我需要从PHP端还是从JS端推送它?我已经尝试使用array\u push($array,$row)
,其中$array是一个空数组,$row是在循环中从数据库返回的,
循环中,我刚刚在JSON中遇到另一个语法错误意外
找出为什么会出现感谢您提供了这个非常可靠的解决方案。退出(JSON_encode(…)
。我不知道这个把戏;-)@aendeerei它终止当前脚本,因此基本上像一个巨大的返回,但是是全局的。你可以在退出之前给它一个整数或字符串来打印。我想说的是,你似乎无法实际返回它。Uncaught SyntaxError:JSON输入的意外结束
,这对一些人来说可能很明显,但是echo JSON\u encode($returnArray);
工作正常。尽管从现在起我将使用exit()
函数。@CodyRobinson感谢您的解释。事实上,和Brandon一样,我也计划在将来测试和使用它。
echo json_encode($row);
<?php
class BlogRoll extends Connection {
public function __construct() {
$this->connect();
$sql = "SELECT `id`, `user_id`, `user_name`, `content`, `date_created`
FROM `posts`
ORDER BY `date_created` DESC";
$query = $this->connect()->prepare($sql);
$result = $query->execute();
$returnArray = array(); // Create a blank array to put our rows into
if ($result) {
while ($row = $query->fetch(PDO::FETCH_OBJ)) {
array_push($returnArray, $row); // For every row, put that into our array
}
} else {
// Send the JSON back that we didn't find any data using 'message'
$returnArray = array(
"message" => "No data was found"
);
}
header('Content-Type: application/json;charset=UTF-8'); // Setting headers is good :)
exit(json_encode($returnArray)); // Exit with our JSON. This makes sure nothing else is sent and messes up our response.
}
}
If I only have one(1) item I am able to access it data.id, data.user_name, so on and so forth.
if ($result) {
// Save the fetched data into an array (all at once).
$fetchedData = $query->fetchAll(PDO::FETCH_ASSOC);
// Json-encode the whole array - once.
// header('Content-Type: application/json;charset=UTF-8');
echo json_encode($fetchedData);
} else {
echo 'NO POSTS TO DISPLAY';
}