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';
}