意外的令牌<当使用json时

时间:2015-10-27 19:45:09

标签: javascript php json ajax

执行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)),,

问题是什么?

2 个答案:

答案 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期待它