这可能非常容易,但我只是理解逻辑。我试图理解AJAX是如何工作的,我在w3schools.com上找到了以下示例。一些其他网站的示例或多或少相同。
<!DOCTYPE html>
<html>
<body>
<h2>Retrieve data from XML file</h2>
<p><b>Status:</b> <span id="A1"></span></p>
<p><b>Status text:</b> <span id="A2"></span></p>
<p><b>Response:</b> <span id="A3"></span></p>
<button onclick="loadDoc('note.xml')">Get XML data</button>
<script>
所以,在这一点上,我们点击了按钮并启动了功能。
function loadDoc(url) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
document.getElementById('A1').innerHTML = xhttp.status;
document.getElementById('A2').innerHTML = xhttp.statusText;
此时,我们正试图用服务器的答案填充A3跨度。但我们甚至不知道网址是什么!
document.getElementById('A3').innerHTML = xhttp.responseText;
}
};
这里有我们的网址
xhttp.open("GET", url, true);
我们发送请求
xhttp.send();
}
</script>
Aaand学分。
</body>
</html>
令我惊讶的是,它没有任何障碍。但在设置我们的URL后,我们没有指示浏览器更新div。我们在之前做了我们介绍了我们的网址,此时我们没有来自服务器的数据。
我真的无法理解它。这是什么逻辑?该匿名函数(xhttp.onreadystatechange one)是否与xhttp.send()命令一起激活?或者onreadystatechange命令循环直到满足条件?
答案 0 :(得分:3)
XMLHttpRequest.onreadystatechange
属性包含在readystatechange
事件被触发时要调用的事件处理程序,即每次readyState
XMLHttpRequest
属性发生更改时。从用户界面线程调用回调。使用abort()方法取消XMLHttpRequest请求时,不会触发
readystatechange
事件。
它不会保持循环,在readyState值更新时会触发它。 readystate的值为0,1,2,3,4。零是在未调用open()
时。在open
之前设置它并不是什么大问题,它不需要按顺序排列。
答案 1 :(得分:1)
在浏览器调用onreadystatechange
之前,该函数不会运行。定义函数时,URL的作用并不重要。