假设我有包含内容的txt文件 - 1st print
。
我有这个文件阅读程序 -
var reader = new XMLHttpRequest() || new ActiveXObject('MSXML2.XMLHTTP');
function loadFile() {
reader.open('get', 'file.txt', true);
reader.onreadystatechange = displayContents;
reader.send(null);
}
function displayContents() {
if(reader.readyState==4) {
if(reader.status === 200 || reader.status == 0) {
console.log(reader.responseText);
}
}
}
loadFile() ;
console.log("2st print");
当我运行它时,我得到异步结果 -
2nd print
1st print
然而
以下程序提供同步结果 -
function readTextFile(file)
{
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, false);
rawFile.onreadystatechange = function ()
{
if(rawFile.readyState === 4)
{
if(rawFile.status === 200 || rawFile.status == 0)
{
var allText = rawFile.responseText;
console.log(allText);
}
}
}
rawFile.send(null);
}
readTextFile("file.txt");
console.log("2nd print");
结果 -
1st print
2nd print
第一个程序中异步的原因是什么?
答案 0 :(得分:3)
open
的第三个参数是XHR对象是异步(true
)还是同步(false
)。后者具有在处理请求时锁定浏览器的UI的负面影响,因此最好尽可能避免(并且它基本上总是可行的)。
答案 1 :(得分:1)
找到资源。
参考mozilla docs。
open
函数中的第三个参数是设置sync
void open(
DOMString method,
DOMString url,
optional boolean async,
optional DOMString user,
optional DOMString password
);
true
表示异步,false
表示同步。