【问题标题】:JSON.parse error, please tell what is wrong with it?JSON.parse 错误,请告诉它有什么问题?
【发布时间】:2015-08-19 16:32:52
【问题描述】:

在我尝试了这段代码之后,我从 firebug 收到了这个错误:SyntaxError: JSON.parse: unexpected character at line 2 column 1 of the JSON data.

由于对json有点了解,自己也搞不明白。你能看看我的代码,请告诉我错误应该来自哪里?请不要再搁置它。

这是我的 ajax 代码:

function sortSubcat(str)
{
if (str=="")
{
 document.getElementById("subcat").innerHTML="";
 return;
} 
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
 xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
 xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
    var response = JSON.parse(xmlhttp.responseText);
    var selectElement = document.getElementById('subcat');
    for(var i = 0; i < response.length; i++)
    {
        var idx = i+1;
        selectElement.options[idx] = new Option(response[idx].value, response[idx].name, false, false);
     }   
 }
}

 xmlhttp.open("GET","/member/sortsubcat.php?q="+str,true);
 xmlhttp.send();
}

这是我的 php:

<?php
require_once("../configs/dbconnect.php");
if (!empty($_GET['q'])){
 $q = basename($_GET['q']);
$sql="SELECT * FROM subcat WHERE maincat=:q";
$result = $conn->prepare($sql);
$result->bindParam(':q', $q);
$result->execute();
echo "<option value=''>Please select a sub category</option>";
$returned_string = '[';
foreach($result as $row)
{
//echo "<option value='$row[name]'>$row[name]</option>";
 $returned_string .= '{"name" : "'. $row['name']. '", "value" : "'. $row['name']. '"},';
}
 $returned_string = substr($returned_string, 0, -1); //remove trailing ','
 $returned_string .= ']';
 header("Content-type: application/json");
 echo $returned_string;
 exit;
}
else{
  echo "<option value=''>Please select a sub category</option>";
 }
 $conn=null;
 ?>

这是来自 ajax 的响应:

[{"name" : "sub1", "value" : "sub1"},{"name" : "sub2", "value" : "Sub2"}]

【问题讨论】:

  • 当 PHP 有一个非常好的json_encode() 函数时,为什么还要在 PHP 代码中手动创建 JSON 字符串???
  • 我原来的代码是://echo "";在这种情况下,我如何使用 json_encode() 函数?请解释一下?
  • 我已经发布了一个答案来澄清。但你真的应该查看json_encode() 的 PHP 手册页。

标签: ajax json


【解决方案1】:

也许我在这里误解了一些东西,但是如果您发布的 AJAX 响应

<option value=''>Please select a sub category</option>[{"name" : "sub1", "value" : "sub1"},{"name" : "sub2", "value" : "Sub2"}]

应该是JSON,问题是响应不是 JSON。第一部分是 HTML,第二部分是 JSON。如果您的代码需要 JSON,它将不接受 HTML / JSON 混合。

【讨论】:

  • 在我去掉 html 部分后,我得到了这个错误:TypeError: response[idx] is undefined??
【解决方案2】:

首先,如果您要输出 JSON,那么您就不能同时输出 HTML,因此您需要删除要回显 &lt;option&gt; 标记的位。

其次,如果你要输出 JSON,你真的应该使用 PHP 内置的 json_encode() 函数,而不是自己构建 JSON 字符串。

这是您进行上述更改的代码:

<?php
require_once("../configs/dbconnect.php");
$output = [];
if (empty($_GET['q'])){
    $q = basename($_GET['q']);
    $sql="SELECT name as name, name as value FROM subcat WHERE maincat=:q";
    $result = $conn->prepare($sql);
    $result->bindParam(':q', $q);
    $result->execute();

    foreach($result as $row) {
        $output[] = $row;
    }
}
echo json_encode($output);
?>

【讨论】:

    猜你喜欢
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多