XMLHttpRequest 事件监听器的执行顺序
XMLHttpRequest event listeners order of execution
我有代码使用 XMLHttpRequest
检索一些数据,看起来像这样:
var myObject = new MyObject();
var req = new XMLHttpRequest();
req.addEventListener("load", function () {
myObject.data = req.responseText;
}, false);
req.addEventListener("loadend", function () {
myObject.save();
}, false);
req.open("GET", "http://www.example.com/foo.txt", true);
req.send(null);
基本上,如果Ajax请求成功,我想保存myObject
中检索到的数据,然后不管Ajax请求的状态如何,我都想保存myObject
到数据库。到目前为止,它按预期工作,但我对 load
和 loadend
侦听器的执行顺序有些不安。我能找到的最多的是 XMLHttpRequest
living standard(关于 loadend
):
After one of error, abort, timeout or load has been dispatched.
这是否保证如果 Ajax 请求成功,load
侦听器将 完成 在 loadend
侦听器 开始?
order of execution of the load
and loadend
listeners
正如您可以从 the standard 判断的那样,loadend
将始终在 load
或相应的错误事件之后调度。
Does this guarantee that if the Ajax request succeeds, that the load
listener will finish executing before the loadend
listener starts?
JavaScript 是单线程的,有一个 运行-to-completion 事件循环。两个听众永远不会同时运行。
我有代码使用 XMLHttpRequest
检索一些数据,看起来像这样:
var myObject = new MyObject();
var req = new XMLHttpRequest();
req.addEventListener("load", function () {
myObject.data = req.responseText;
}, false);
req.addEventListener("loadend", function () {
myObject.save();
}, false);
req.open("GET", "http://www.example.com/foo.txt", true);
req.send(null);
基本上,如果Ajax请求成功,我想保存myObject
中检索到的数据,然后不管Ajax请求的状态如何,我都想保存myObject
到数据库。到目前为止,它按预期工作,但我对 load
和 loadend
侦听器的执行顺序有些不安。我能找到的最多的是 XMLHttpRequest
living standard(关于 loadend
):
After one of error, abort, timeout or load has been dispatched.
这是否保证如果 Ajax 请求成功,load
侦听器将 完成 在 loadend
侦听器 开始?
order of execution of the
load
andloadend
listeners
正如您可以从 the standard 判断的那样,loadend
将始终在 load
或相应的错误事件之后调度。
Does this guarantee that if the Ajax request succeeds, that the
load
listener will finish executing before theloadend
listener starts?
JavaScript 是单线程的,有一个 运行-to-completion 事件循环。两个听众永远不会同时运行。