1

私は AJAX Requesting と 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

1 つは、jQuery を使用してトラブルシューティングを行うことです。それはあなたの人生をとても楽にするでしょう。生の xmlhttprequest を使用することになったとしても、コード内の xmlhttprequest の問題を除外するために jQuery を導入することをお勧めします。実際の問題をより迅速に突き止めることができます。

翻訳: 私は生の 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 Dev Tools または Firebug を使用していることを確認してください。そこで失敗している可能性があります。

アップデート:

HTML ページ (ajax 呼び出しを行っているページ) と PHP スクリプトが同じドメイン (localhost) で実行されていることを確認してください。http://localhostajax 呼び出しで完全な URL を指定していることに気付きました。Ajax はクロスドメインでは機能しません (回避策はありますが、クロスドメインで本当に必要な場合は JSONP を参照してください)。最善の策は、PHP スクリプトと同じドメインから HTML ページをロードすることです。

更新 2:

実際の問題は、OP が自分のコンピューターのフォルダーから HTML をロードし (経由ではなくhttp://localhost)、への ajax 呼び出しを試みていたことhttp://localhostです。これは技術的にクロスドメインであるため、ajax 呼び出しは失敗していました。

于 2013-03-29T15:06:54.940 に答える