【发布时间】: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 手册页。