位于0的JSON中的意外标记

时间:2017-05-22 01:39:17

标签: javascript php json

我总是在我的代码中的位置0的JSON中获得意外的令牌

echo json将是

["pen","pencil","apple","cat","dog"]

并且控制台将获取Uncaught SyntaxError:位于0的JSON中的意外标记p

php代码:

    <?php

        include 'Connect_2.php';
        header('Content-Type: application/json;charset=utf-8');
        $Store_int =$_GET['num'];

        #execute sql function and return result
        $sql = "SELECT * FROM `store` WHERE `Place_int` = ".$Store_int;

        mysqli_select_db($link,"web");
        $link -> set_charset("utf8");
        $result = mysqli_query($link,$sql);

        $arr = array();
        while ($row = mysqli_fetch_object($result)){
            $p =(string) $row -> Name;
            $arr[]=$p;
        }
        //print_r($arr);
        $jsonArr = json_encode($arr,JSON_UNESCAPED_UNICODE);

        echo ($jsonArr);
        mysqli_free_result($result);
        mysqli_close($link);
    ?>

.js代码

function getArr(store_int){
var jsArray = new Array();
$.ajax({
    url: "fromSQL_store.php",
    data: {
        num: store_int
    },
    type: "GET",
    dataType: "json",
    success: function(data) {
        jsArray = JSON.parse(data);
        //jsArray = data;
    },error: function(data,XMLHttpRequest, textStatus, errorThrown){
        console.log(textStatus);
        console.log(errorThrown);
    }
});
//alert(jsArray.length);
console.log(jsArray[0]);
return jsArray;

}

如果我使用jsArray = data ;console(jsArray[0])将显示未定义。

2 个答案:

答案 0 :(得分:2)

它已经是JSON了。不要调用jsArray = JSON.parse(data);而是将data视为JSON对象。

而不是console(jsArray[0])调用console(jsArray)data对象似乎不是数组。

同样,看起来你发送ajax请求后就调用了console.log,这没有给你任何时间来接收填充对象的响应,所以它会是空的。将console.log放在ajax请求的成功回调中。

JSON.parse()在解析已经是JSON的东西时会抛出这个错误,这真的很烦人,因为它肯定会很好,如果它只是将原始JSON返回给你或至少抛出一个更精确的错误,如“错误:这已经是JSON了。“

答案 1 :(得分:0)

您的回复标题Content-Type可能是text/html而不是application/json

因此,如果响应头是text/html,则需要将文本解析为JSON对象,但如果响应头为application/json,则它已被解析为JSON Object

解决方案是设置正确的Content-Type标题。

如果响应标头(Content-Type)是text / html:

var jsonObj = JSON.parse(responseData);

如果响应标头(Content-Type)是application / json:

var jsonObj = responseData;