我的php返回的内容如下:
if(!$result = $db->query($sql)){
echo $db->error;
die('There was an error running the query [' . $db->error . ']');
}
echo 'Total results: ' . $result->num_rows . "\n";
while($row = $result->fetch_assoc()){
echo json_encode($row);
echo "\n";
}
在我的javascript中,我想将输出放在页面上,如果它是一个json对象,或者只是将其记录到控制台上,如果它是别的东西:
var divOutput = function(output) {
try {
// var x = output.trim();
// x = JSON.parse(JSON.stringify(x));
var x = JSON.parse(output);
console.log(x);
$("#dbOut").html(JSON.stringify(x, null, '\t'));
} catch (e) {
console.log(output);
console.log(e);
}
}
var getPlayerByID = function() {
var myNumber = document.getElementById("PlayerInput").value;
$.ajax({
url : "db_funcs.php",
data : {
action : 'getPlayerByID',
a : myNumber,
},
type : 'post',
success : function(output) {
divOutput(output);
}
然而,当我查询数据库时,它会抛出JSON解析错误。我怎样才能做到这一点? }) }
答案 0 :(得分:2)
JSON必须作为SINGLE单片json字符串输出。您正在构建多个SEPARATE json字符串,这是非法的语法。
考虑JSON几乎等同于javascript变量赋值的右侧:
var foo = this_part_is_json;
e.g。你需要
var foo = [[stuff from row 1], [stuff from row2], etc...];
但正在制作
var foo = [stuff from row1][stuff from row2];
^---syntax error would occur here
你需要
$arr = array();
while($row = fetch from db) {
$arr[] = $row;
}
echo json_encode($arr);
答案 1 :(得分:1)
这是错误的
while($row = $result->fetch_assoc()){
echo json_encode($row);
echo "\n";
}
试试这个
$arr = array();
while($row = $result->fetch_assoc()){
$arr[] = ($row);
}
echo json_encode($arr);
仅使用json_encode()
一次,使用数组在while()
答案 2 :(得分:1)
它会抛出错误,因为您不是仅回显json。
在第
行echo 'Total results: ' . $result->num_rows . "\n"
你已经回应了一些不是json编码的东西。 使用此代码,它应该工作:
//echo 'Total results: ' . $result->num_rows . "\n"; <---- this is not json
$arr = [];
while($row = $result->fetch_assoc()){
$arr[] = $row; //save each row in array
//echo "\n";
}
echo json_encode($arr); //encode all data as json
如果你想在json输出中输入行数,请在$arr
中添加一个像
$arr["num_rows"] = $result->num_rows;