执行xmlxttp请求时出现以下错误: 意外的令牌< 我的js代码:
function getInfo(){
var xhttp;
if (window.XMLHttpRequest) {
// code for modern browsers
var std = document.getElementById("std").value;
xhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
var stdInfo = JSON.parse(xhttp.responseText);
document.getElementById("id").value=stdInfo[0].id;
document.getElementById("name").value=stdInfo[0].name;
document.getElementById("address").value=stdInfo[0].address;
document.getElementById("descripton").value=stdInfo[0].description;
}
}
xhttp.open("GET", "update.php?std="+std, true);
xhttp.send();
}
和php代码是:
header("Access-Control-Allow-Origin: *");
header("Content-Type: text/javascript; charset=UTF-8");
$name = $_GET['std'];
$con=mysqli_connect("localhost","root","","School3");
mysqli_query($con, 'SET NAMES "utf8" COLLATE "utf8_general_ci"' );
if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result=mysqli_query($con,'select * from student where name=\''.$name.'\'');
$student="[";
while ($raw=mysqli_fetch_array($result)){
$student.= '{"id":"' . $raw["id"] . '",';
$student .= '"name":"' . $raw["name"] . '",';
$student .= '"address":"'. $raw["address"] . '"}';
}
$student="]";
echo($student);
?>
我尝试了以下两种解决方案,但没有任何效果: 首先我换了:
header("Conhtent-Type: text/javascript; charset=UTF-8");
用这个:
header("Conhtent-Type: application/json; charset=UTF-8");
我试过echo($ student)insted echo(json_encode($ student)),,
问题是什么?
答案 0 :(得分:0)
此代码
$student="[";
while ($raw=mysqli_fetch_array($result)){
$student.= '{"id":"' . $result["id"] . '",';
$student .= '"name":"' . $rs["name"] . '",';
$student .= '"address":"'. $rs["address"] . '"}';
}
$student="]";
已经创建了类似json的字符串,如果它在最后一行没有错误,那么你将覆盖$student
变量的内容。所以你不能使用json_encode
函数。只是echo ($student);
但我强烈建议使用此功能,因为它会为您完成所有不好的工作 - 例如转义字符,并在每个对象后添加逗号,您的脚本绝对不会。并重写你的代码:
$student = array();
while ($raw=mysqli_fetch_array($result)){
$student[] = array(
"id" => $result["id"], // maybe $raw['id']
"name" => $rs["name"], // maybe $raw['name']
"address" => $rs["address"], // maybe $raw['address']
);
}
echo(json_encode($student));
答案 1 :(得分:0)
尝试查看浏览器中的响应(例如,使用内部检查器)。有可能,您从PHP中收到错误,这会在您的回复中生成HTML代码。 (意外的<
。)
其次,您不必json_encode
,因为您已经尝试使用JSON代码生成字符串。而是尝试将$student
设为对象或数组,用行填充,然后echo
json_encode
d $student
。
第三,$result["id"]
和$rs[..]
&#39;应该是$raw
,因为这是您将MySQL行提取到的变量的名称。< / p>
第四,不要使用ob_clean();
。它没有任何意义。如果PHP抛出了错误,您需要解决/解决这个问题。 (不要尝试删除错误消息;))
最后,但并非最不重要的是,你正在做$student="]";
,这使得所有事情都无效并且设置了&#39;]&#39;作为$student
的价值。
P:不要忘记在description
变量中添加$student
,因为您的JavaScript期待它