AJAXを学び始めたばかりの初心者の質問で申し訳ありません。
「myName」テキストが変更されたときに divMessage コンテンツが継続的に変更される原因を正確に理解したいと思います。
1) Javascript 関数プロセスが常に「リッスン」しているように見えますが、これは通常の Javascript の動作ですか、または「プロセス」を繰り返し呼び出すトリガーはありますか? 2) 「body onload」に割り当てた関数が繰り返し実行されるというのは本当ですか? この繰り返し実行の頻度は? 3) 関数プロセスを 1 回だけ実行したい場合はどうすればよいですか?
4) ボディが 1 回しかロードされないと思っているので、混乱しています。しかし、「body onload」の後に関数「process」が呼び出され、関数 process が divMessage を変更して「body」を変更し、本質的に「body onload」を再び通過させてから「process」を再度行うためですか?など..?
ご協力いただきありがとうございます。
<head>
<script type="text/javascript" src="quickstart.js"></script>
</head>
<body onload='process()'>
Server wants to know your name:
<input type="text" id="myName" />
<div id="divMessage" />
</body>
これがquickstart.js処理パーツです
function process()
{
// proceed only if the xmlHttp object isn't busy
if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
{
// retrieve the name typed by the user on the form
name = encodeURIComponent(
document.getElementById("myName").value);
// execute the quickstart.php page from the server
xmlHttp.open("GET", "quickstart.php?name=" + name, true);
// define the method to handle server responses
xmlHttp.onreadystatechange = handleServerResponse;
// make the server request
xmlHttp.send(null);
}
}
// callback function executed when a message is received from the server
function handleServerResponse()
{
// move forward only if the transaction has completed
if (xmlHttp.readyState == 4)
{
// status of 200 indicates the transaction completed successfully
if (xmlHttp.status == 200)
{
xmlResponse = xmlHttp.responseXML;
xmlDocumentElement = xmlResponse.documentElement;
helloMessage = xmlDocumentElement.firstChild.data;
// display the data received from the server
document.getElementById("divMessage").innerHTML =
'<i>' + helloMessage+ '</i>';
}
}
}
そしてquickstart.php
<?php
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
echo '<response>';
$name = $_GET['name'];
// generate output depending on the user name received from client
$userNames = array('YODA', 'AUDRA', 'BOGDAN', 'CRISTIAN');
if (in_array(strtoupper($name), $userNames))
echo 'Hello, master ' . htmlentities($name) . '!';
else if (trim($name) == '')
echo 'Stranger, please tell me your name!';
else
echo htmlentities($name) . ', I don't know you!';
echo '</response>';
?>