ajax中的异步和同步XMLHttpRequest

时间:2015-09-06 18:10:27

标签: javascript ajax asynchronous xmlhttprequest synchronous

我是ajax的新手,正在关注Lynda“Javascript和Ajax”教程。这就是我遇到的问题。

我有一个名为“data”的文本文档,其中保存了文本HELLO WORLD。

我的index.html文件是:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>JavaScript AJAX</title>
</head>
<body>
<script src="script.js"></script>
</body>
</html>

我的javascript文件是:

for(var i = 0; i < 100; i++){
var request = new XMLHttpRequest();
    request.open('GET', 'data.txt',false);
    request.send();
    console.log(request);
    document.writeln(request.responseText);

}

我的问题是当我通过给出参数false(在request.open()上)执行同步XMLHttpRequest时,我的浏览器按照代码显示“HELLO WORLD”100次。但是当我尝试通过赋予参数true或者执行Asynchronous XMLHttpRequest时没有任何默认值,浏览器不会显示任何内容。为什么会这样?

有谁可以帮我解决这个问题?我正在掌握有关异步和同步请求的一些知识。这些与上面的代码有什么不同呢?我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

异步调用不会阻止后续代码执行。在您的示例中,console.log在异步请求完成之前运行。

使用上面的代码作为指导,这是一个有效的例子。

for (var i = 0; i < 100; i++) {
    var req = new XMLHttpRequest();

    req.addEventListener('load', complete, false);
    req.open('GET', '/echo/json/', true);
    req.send();
}

function complete(e) {
    console.log(this.responseURL);
}

http://jsfiddle.net/75eLfwz1/