尝试此代码后,我从firebug收到此错误:SyntaxError:JSON.parse:JSON数据第2行第1列的意外字符。
因为我对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"}]
答案 0 :(得分: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混合。
答案 1 :(得分:0)
首先,如果您要输出JSON,那么您也无法输出HTML,因此您需要删除您回显<option>
标记的位。
其次,如果您正在输出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);
?>