3

私は非常に単純なAJAXとPHPのコードを持っています。AJAXを介してPHPを呼び出すと、応答コードが0として受信されます。PHPコードは正常に実行されますが、応答を取得できません。このステータス「0」は何を意味し、どうすればこれを解決できますか?

function confirmUser(id)
{
    xmlhttp=GetXmlHttpObject();
    regid = id;
    if (xmlhttp==null)  {
        alert ("Browser does not support HTTP Request");
        return;
    }
    var url="confirm.php";
    url=url+"?id="+id;
    url=url+"&a=confirm";
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            $("#txtHint" + regid).text("Awaiting confirmation");
        } else {
            alert (xmlhttp.status); //this shows '0'
        }
    };
    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
}

さて、これは私が使用したjavascriptです。これ以上追加する必要があったらごめんなさい。また、私が逃したことを教えてください。私はあなたの助けに感謝します

GetXmlHttpObject関数:

function GetXmlHttpObject()
{
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        return new XMLHttpRequest();
    }
    if (window.ActiveXObject) {
        // code for IE6, IE5
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
    return null;
}
4

4 に答える 4

3

過去にXMLHttpRequestsを操作していたとき、ローカルで処理されたファイルに対してステータス0が通常返されることがわかりました。この質問を見たとき、私は少し探し回って、次のページでこれの確認を見つけました:

于 2010-04-23T12:16:20.580 に答える
2

これがreadyStateコードです。

0. Uninitialized
1. Set up, but not sent
2. Sent
3. In flight
4. Complete

(出典:http ://www.stevefenton.co.uk/Content/Blog/Date/201004/Blog/AJAX-Ready-State-Codes/ )

常にreadyState0でスタックしていますか?もしそうなら、それはあなたのリクエストが送信されていないことを意味しますが、あなたの例「xmlhttp.send(null)」のコード行を見ることができます...

sendを呼び出す前に0が返されると予測しますが、その後は別のステータスコードになります。少し待つとどうなりますか?

于 2010-04-23T10:37:11.630 に答える
1

人々がそれを聞きたくないかもしれないことを私は知っています、しかしこれはまさにJSフレームワークが目的であるものです。jQueryを介して単純なAJAX呼び出しを実行できるのに、カスタムAJAX呼び出しであるさまざまなブラウザーの傾向や災害のすべてを台無しにするのはなぜですか。

基本的に、あなたは車輪の再発明をしているのですが、理由はありません。PHPにJSONデータを返してもらい、それをテストする必要がある場合は、成功コードに変数を埋め込みます。

<script src="jquery.js"></script>
<script>
  $.get("myphp.php", { id : "yes", blah : "stuff" }, function(data) {
  if (data.success == 1) {
    alert("got data");
  } else {
    alert("didn't get data");
  }
},"json");
</script>

ブーム、これでクロスブラウザAJAXができました。

于 2010-04-24T01:05:12.433 に答える
0

これは、HTTPSリソースを要求していて、ハンドシェイクが失敗した場合(たとえば、無効な証明書)に発生する可能性があります。特に、ブラウザの外部からXMLリクエストオブジェクトを使用している場合、エラーは明らかではない可能性があります。

于 2012-05-22T15:01:29.407 に答える