【问题标题】:JSON.parse throws unexpected token errorJSON.parse 抛出意外的令牌错误
【发布时间】:2015-02-10 00:18:36
【问题描述】:

当我尝试解析多个 JSON 对象时,JSON.parse 会引发“意外令牌”错误。我以前使用过这种方法,但仅当数组涉及一行查询结果时。

任何帮助将不胜感激。 谢谢

错误

Uncaught SyntaxError: Unexpected token {

JavaScript

if(window.XMLHttpRequest){
    var request = new XMLHttpRequest();
    } else {
    var request = new ActiveXObject(microsoft.XMLHTTP);
    }
    request.open('POST', 'controllers/engineersOutput.php', true);
    request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        request.onreadystatechange = function(){
        if((request.readyState==4) && (request.status==200 || request.status==304)) {

        var str = request.responseText;
        var data = JSON.parse(str);

        console.log(data);

        }
    }
    request.send();

PHP

public function getEngineerDetails(){
        include "connect.php";
        $query = "SELECT * FROM `engineers`";
        $result = mysqli_query($con, $query);
        while($row=mysqli_fetch_assoc($result)){

            $name = $row['name'];
            $pic =  $row['pic'];
            $insertedEngs = array( "name"=>$name, "pic"=>$pic );
            echo json_encode($insertedEngs);
        }

    }

【问题讨论】:

    标签: javascript php ajax json


    【解决方案1】:

    看起来您的代码正在返回 JSON 编码对象的序列,而 JSON 解析器无法识别该序列。将您的对象收集到一个数组中(在 PHP 代码中),然后在完成后通过 json_encode 回显整个数组。然后您的客户端将收到一个 JSON 数组。

    【讨论】:

      【解决方案2】:

      很可能您从服务器创建的 JSON 字符串格式不正确,因为您创建它的方式。

      在循环内不要构造JSON字符串,先构造完成数组,最后编码:

      public function getEngineerDetails() {
      
          include "connect.php";
          $query = "SELECT * FROM `engineers`";
          $result = mysqli_query($con, $query);
      
          // define a container first
          $data = array();
      
          while($row = mysqli_fetch_assoc($result)){
              // while inside the loop
              // construct the array first
              $insertedEngs = array("name" => $row['name'], "pic" => $row['pic']);
      
              $data[] = $insertedEngs; // continually push 
          }
      
          // then encode output when done
          echo json_encode($data);
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 2014-12-26
        • 2018-01-06
        • 2018-02-11
        • 2011-07-05
        • 1970-01-01
        相关资源
        最近更新 更多