SyntaxError:JSON.parse:解析PHP输出时的意外字符

时间:2015-12-01 17:28:57

标签: javascript php json

我的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解析错误。我怎样才能做到这一点? }) }

3 个答案:

答案 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;