XMLHttpRequest事件侦听器的执行顺序

时间:2015-07-29 18:51:11

标签: javascript ajax xmlhttprequest

我使用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保存到数据库中。到目前为止,它的工作原理是如此,但我对loadloadend听众的执行顺序略感不安。我能找到的最多来自XMLHttpRequest living standard(关于loadend):

  

发出错误之一后,已分派中止,超时或加载。

这是否保证如果Ajax请求成功,load侦听器完成loadend侦听器启动之前执行?

1 个答案:

答案 0 :(得分:0)

  

loadloadend听众的执行顺序

您可以从the standard判断,loadend将始终在load或相应的错误事件后发送。

  

这是否保证如果Ajax请求成功,load侦听器将在loadend侦听器启动之前完成执行?

JavaScript是单线程的,具有运行完成事件循环。两个听众永远不会同时跑。