使用php的AJAX请求的responseText为空

使用php的AJAX请求的responseText为空,php,ajax,responsetext,Php,Ajax,Responsetext,我对AJAX和PHP非常熟悉,我有一个问题: 我试图对wamp服务器上的php文件执行GET请求,但它的responseText保持为空,当我检查readyState为4时的状态代码时,它为0 当我在浏览器中执行php文件时,它会返回我的期望值:一个包含JSON对象的数组 有人知道答案吗 Javascript代码: this.getCars = function(id) { var xmlhttp; if (window.XMLHttpRequest) { xml

我对AJAX和PHP非常熟悉,我有一个问题: 我试图对wamp服务器上的php文件执行GET请求,但它的responseText保持为空,当我检查readyState为4时的状态代码时,它为0

当我在浏览器中执行php文件时,它会返回我的期望值:一个包含JSON对象的数组

有人知道答案吗

Javascript代码:

this.getCars = function(id) {
    var xmlhttp;
    if (window.XMLHttpRequest) {
        xmlhttp=new XMLHttpRequest();
    }
    else {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    var that = this;
    xmlhttp.onreadystatechange=function()
    {

        if (xmlhttp.readyState==4)
        {
            alert(xmlhttp.status);
            //that.lastTableCars = JSON.parse(xmlhttp.responseText);

        }
    }
    xmlhttp.open("GET","http://localhost/getCars.php?q="+id,true);
    xmlhttp.send(null);
}
PHP:


首先,使用jQuery帮助解决问题。这会让你的生活轻松很多。即使您最终想要使用原始的xmlhttprequest,我建议引入jQuery来排除代码中的xmlhttprequest问题,并更快地了解真正的问题

翻译:我不习惯使用原始xmlhttprequest,所以为了帮助您,让我们切换到jQuery。问题解决后,您可以返回!=)

另外,请确保您正在使用Chrome开发工具或Firebug来检查服务器的响应,因为它可能在那里失败

更新:

确保HTML页面(进行ajax调用)和PHP脚本在同一个域(localhost)上运行。我注意到您指定了完整的
http://localhost
ajax调用中的URL。Ajax不能跨域工作(虽然有解决方法,但如果确实需要跨域工作,请查看JSONP)。最好的办法是从与PHP脚本相同的域加载HTML页面

更新2:


实际的问题是OP正在从他计算机上的文件夹中加载HTML(不是通过
http://localhost
)并尝试对
http://localhost
。ajax调用失败,因为这在技术上是跨域的。

您的php代码缺少
?>
…您的代码易受sql注入攻击,不推荐使用(mysql)
?>
。我建议您对ajax调用使用jQuery。我对简单的javascript方法非常不熟悉,因为现在很难看出是否有任何错误。在我看来,jQuery让它变得简单多了,可能会解决你的问题。这不是为了网站的目的,而是为了学校的作业,因此只在本地使用@BlargleMonster使用JQuery是一个选项,但不需要。作为学生,我们将得到不使用iTunes的奖励,同样的结果,空白响应(数据),同时Firebug用红色表示ajax请求如果Firebug显示为红色,这通常意味着服务器无法返回有效响应。就像一个500服务器错误。您应该能够检查Firebug中的ajax调用,并准确地看到从服务器返回的内容。可能您没有传递有效的ID,而您的数据库查询失败了?数据库查询没有失败,因为当我直接在服务器上运行php文件时,它会返回我想要的数据,但是当您直接在正在传递的服务器上运行php文件时,您自己会返回?ID=X。测试ajax时,getCars(id)方法可能没有获得有效id,也没有向服务器传递有效id。一句话:使用firebug准确地检查发送到服务器的内容。如果没有这些,你就是在黑暗中拍摄。因此,在Net选项卡上,单击刚刚发送的ajax调用,然后单击Response选项卡。这将显示服务器正在发送回的内容。您在响应中看到了有效的JSON吗?
<?php
$q=$_GET["q"];
$con = mysql_connect('127.0.0.1', 'root', 'root');
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("autobay", $con);

$sql= "SELECT * FROM autoos WHERE id = '".$q."'";

$result = mysql_query($sql);
$info = [];
while( $row = mysql_fetch_assoc( $result)){
    $info[] = $row; 
}

echo json_encode($info);

mysql_free_result($result);
mysql_close();
this.getCars = function(id) {
   $.get("/getCars.php?q="+id, function(data) {
      alert("response from server: " + data);
   });
}