JSON.parse会引发意外的令牌错误

时间:2015-02-10 00:18:37

标签: javascript php ajax json

JSON.parse会抛出一个"意外的令牌"我尝试解析多个JSON对象时出错。我之前使用过这种方法,但只有当数组涉及一行查询结果时才会使用。

非常感谢任何帮助。 谢谢

错误

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

    }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

由于您创建服务器的方式,从服务器创建的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);

}