1

我对 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:

<?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();
4

1 回答 1

2

一方面,使用 jQuery 来帮助解决问题。它会让你的生活变得更轻松。即使您最终想要使用原始 xmlhttprequest,我建议您引入 jQuery 以排除代码中的 xmlhttprequest 问题,并更快地解决实际问题。

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

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

http://api.jquery.com/jQuery.get/

还要确保您使用 Chrome 开发工具或 Firebug 来检查服务器的响应,它可能在那里失败。

更新:

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

更新 2:

Actual issue was that the OP was loading the HTML from a folder on his computer (not via http://localhost) and trying to make an ajax call to http://localhost. The ajax call was failing since this is technically cross domain.

于 2013-03-29T15:06:54.940 回答