2010-12-14 1 views
1

にreadyStateの4またはステータス200を返したことがない私は、次の一般的なAjaxの機能を持っている:PHPは、Ajax

//run post request 
function ajaxPost (divid, parameters, file) { 

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } else {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

xmlhttp.onreadystatechange=function() { 
    alert ("ok") 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     alert ("ready"); 
     alert (xmlhttp.responseText); 
    divid.innerHTML=xmlhttp.responseText; 
    } 
    } 

    xmlhttp.open("POST", file,true); 

    //Send the proper header information along with the request 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.setRequestHeader("Content-length", parameters.length); 
xmlhttp.setRequestHeader("Connection", "close"); 



xmlhttp.send(parameters); 
} 

予想通り、このセクションでは動作しないということで問題:

xmlhttp.onreadystatechange=function() { 
    alert ("ok") 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     alert ("ready"); 
     alert (xmlhttp.responseText); 
    divid.innerHTML=xmlhttp.responseText; 
    } 
    } 

をブラウザでI私が期待したように複数の "ok"アラートを得ることはできますが、ifステートメントのステートメントは決して起動しません。私はPHPが状態の更新を返すことを意味するが、何らかの理由でreadyコードを返すことはない。それがどうして起こるかわかりません。

誰でも私が準備完了コードを受け取らない理由を教えてもらえますか?

PHP自体は問題ではありません。

<?php 

echo "new"; 

?> 

私は、関数の入力(divIdは、パラメータやファイル)をテストしており、これらはOKです。 この機能は以前は別々のプロジェクトで動作していました。

+0

したがって、状態3になるだけですか? 'readyState'の異なる値を検査してください... –

+0

@Felix Kingがそれをテストしました。それは状態4に達しますが、その直後に状態は404に戻ります。 – YsoL8

+0

'status'も調べてください。多分あなたは404を手に入れているでしょう。編集:そこに行きます。 –

答えて

0

サーバが有効な200応答を返していないと思われるので、if文xmlhttp.readyState == 4 && xmlhttp.status == 200は真になることはありません。

どのようなリクエストが行われているか、返される回答はFirebugです。 Firefoxを使用しない場合は、Charlesのようなプロキシツールを使用してみてください。

さらに、jQueryのような安定したオープンソースのJavascriptライブラリを使用することを強くお勧めします。これにはAJAXコードが組み込まれています(特に、厳密にテストされています)。だけでなく、これはあなたの時間を節約する、それはあなた自身のコードからエラーの更なる可能性を排除します、例えば、

$.get('url.php', function(data) { 
    // 'data' is responseText 
}); 
0

xmlhttp.readyState & & xmlhttp.statusを使用しているブラウザではなく、PHPスクリプトに依存します。最悪の場合、PHPスクリプトはStatus 200を返さない可能性があります。この場合、スクリプトにエラーがあることがあります(場合によってはこれがStatus 500になる場合があります)。またはサーバーの返信者404になります。 いずれにしても、URLに直接アクセスするか、Firebugのログウィンドウを調べると、デバッグが容易になる場合があります。

1
xmlhttp.open("POST", file,true); 

ファイルはURLです。
そのURLからエコーを試みます。

-1

申し訳ありませんが、問題は非常に簡単です。私は一週間一週間かかりました。

xmlhttpxmlHttpと同じではありません。

+0

コメントしてください。 –