onreadystatechange イベント

リクエストがサーバーに送信されると、いくつかの応答ベースのタスクを?qū)g行する必要があります。

readyState が変更されるたびに、onreadystatechange イベントがトリガーされます。

readyState屬性にはXMLHttpRequestのステータス情報(bào)が格納されます。

XMLHttpRequest オブジェクトの 3 つの重要なプロパティは次のとおりです:

PropertyDescription
onreadystatechange ストレージ関數(shù) (または関數(shù)名)。readyState プロパティが変更されるたびに呼び出されます。
readyState

XMLHttpRequestのステータスを保存します。 0から4まで変化します。

  • 0: リクエストは初期化されていません

  • 1: サーバー接続が確立されました

  • 2: リクエストが受信されました

  • 3: リクエストは処理中です

  • 4 : リクエストは完了し、レスポンスは Ready になりました

ステータス200: "OK"
404: ページが見つかりません

onreadystatechange イベントでは、サーバー応答を処理する準(zhǔn)備ができたときに実行するタスクを指定します。

readyState が 4 でステータスが 200 の場合、応答の準(zhǔn)備ができていることを意味します:

Instance

<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","/asset/demo.ajax.php?dm=txt&act=getfruits",true);
xmlhttp.send();
}
</script>
</head>
<body>
<div id="myDiv"><h2>Let AJAX change this text</h2></div>
<button type="button" onclick="loadXMLDoc()">通過 AJAX 改變內(nèi)容</button>
</body>
</html>

注: onreadystatechange イベントは、各変更に対応して 5 回 (0 ~ 4) トリガーされます。準(zhǔn)備完了狀態(tài)。


コールバック関數(shù)の使用

コールバック関數(shù)は、パラメータとして別の関數(shù)に渡される関數(shù)です。

Web サイトに複數(shù)の AJAX タスクがある場合は、XMLHttpRequest オブジェクトを作成するための 標(biāo)準(zhǔn) 関數(shù)を作成し、AJAX タスクごとにその関數(shù)を呼び出す必要があります。

関數(shù)呼び出しには、onreadystatechange イベントの発生時(shí)に実行される URL とタスクが含まれている必要があります (呼び出しごとに異なる場合があります):

Instance

<html>

<head>
<script type="text/javascript">
var xmlhttp;
function loadXMLDoc(url,cfunc)
{
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=cfunc;
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
function myFunction()
{
loadXMLDoc("/asset/demo.ajax.php?dm=txt&act=getfruits",function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  });
}
</script>
</head>
<body>
<div id="myDiv"><h2>Let AJAX change this text</h2></div>
<button type="button" onclick="myFunction()">通過 AJAX 改變內(nèi)容</button>
</body>
</html>