我总是在我的代码中的位置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])
将显示未定义。
答案 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;