0

xmlhttprequest/AJAXの使い方を学んでいます。w3schoolsのこのサンプルコードでは、なぜこの行が表示されるのかわかりません。

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

これに先行します:

 xmlhttp.open("GET","demo_get.asp",true);
 xmlhttp.send();

私の考えでは、responseTextを使用する前に、GETリクエストを送信する必要があります。私の理解の誤りはどこにありますか?

<html>
<head>
<script type="text/javascript">
function loadXMLDoc()
{
var xmlhttp;
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()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","demo_get.asp",true);
xmlhttp.send();
}
</script>
</head>
<body>

<h2>AJAX</h2>
<button type="button" onclick="loadXMLDoc()">Request data</button>
<div id="myDiv"></div>

</body>
</html>
4

3 に答える 3

3

問題の行は、関数であるの内部にありxmlhttp.onreadystatechangeます。使用方法に注意してください。

xmlhttp.onreadystatechange = function ()
{
    ...
}

この場合、これはコールバック関数です。ajaxリクエスト(別名xmlhttp.send())が完了すると呼び出されます。

ajaxに飛び込む前に、JavaScriptをブラッシュアップすることをお勧めします。

于 2012-04-10T07:24:27.570 に答える
2

AJAXワードの非同期部分を発見しました:-)

.send()メソッドが後で呼び出されても、innerHTML呼び出しは早く行われます。

どうしてそれがうまくいくの?

AJAX呼び出しは非同期であるためです。したがって、PHPでデータベース呼び出しを行うのとは異なります。呼び出しを行い、結果を待って、それを処理します。いいえ。

JSでは、AJAX呼び出しの場合、コールバック関数を定義します。これは、応答が到着すると呼び出される関数です。

XMLHttpRequestオブジェクトのonreadystatechange場合、応答が戻ってきたときに発生するイベントです。このイベントで関数を登録すると、応答が返ってきたときにこの関数が呼び出されます。

PS:onreadystatechange応答が戻った後、関数inは正確に起動されませんが、これは説明のためです。このイベントがいつ発生するかを知るには、さまざまな状態を確認してください。

于 2012-04-10T08:50:40.763 に答える
1

そうではありません。このコードを考えてみましょう:

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }

関数内のコードは実行せず、関数を作成してプロパティに割り当てるだけです。この関数は、状態が変化したときにXMLHTTPオブジェクトによって実行され、応答が到着したことを意味する状態の変化をキャッチします。

于 2012-04-10T07:25:08.130 に答える