1

私は次の一般的な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;
    }
  }

ブラウザでは、期待どおりに複数の「ok」アラートが表示されますが、ifステートメントのステートメントは起動しません。私はこれを、phpが状態の更新を返しているが、何らかの理由で準備ができたコードを返さないことを意味すると解釈します。それがどのように起こり得るか-私にはわかりません。

準備ができたコードを受け取れない理由を誰かに教えてもらえますか?

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

<?php

echo "new";

?>

関数入力(除算、パラメーター、ファイル)をテストしましたが、これらは問題ありません。この関数は、以前は別のプロジェクトで機能していました。

4

4 に答える 4

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

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

于 2012-10-10T07:09:36.290 に答える
0

サーバーが有効な 200 応答を返していないのではないかと推測する危険があります。そのため、if ステートメントxmlhttp.readyState == 4 && xmlhttp.status == 200が真と見なされることはありません。

Firebugを使用して、どのような要求が行われているか (ある場合)、どのような応答が返されるかを確認してください。Firefox を使用していない場合は、Charlesなどのプロキシ ツールを使用してみてください。

これらすべてに加えて、 jQueryなどの安定したオープン ソース Javascript ライブラリを使用することを強くお勧めします。これには、すべて厳密にテストされた AJAX コードが組み込まれています (とりわけ)。これにより時間が節約されるだけでなく、独自のコードからエラーが発生する可能性がさらになくなります。

$.get('url.php', function(data) {
    // 'data' is responseText
});
于 2010-12-14T10:54:29.717 に答える
0

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

于 2010-12-14T11:02:24.313 に答える
-1

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

xmlhttpと同じではありませんxmlHttp

于 2012-12-07T13:04:17.380 に答える