2015-07-29 2 views
0

У меня есть код получения некоторых данных с помощью 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 в базе данных. До сих пор он работал так, как планировалось, но я немного обеспокоен порядком исполнения слушателей load и loadend. Максимум, что я мог бы найти на это из XMLHttpRequest living standard (относительно loadend):

После одной ошибки, ABORt, тайм-аут или нагрузка была отправлена.

ли это гарантия того, что если запрос Ajax успешно, что load слушатель закончить выполнение до loadend слушателя начинается?

ответ

0

порядок исполнения load и loadend слушателей

Как вы можете судить из the standard, loadend всегда будут отправлены после load или соответствующего события ошибки.

ли это гарантия того, что если запрос Ajax успешно, что load слушатель завершит выполнение до начала loadend слушателя?

JavaScript является однопоточным, с циклом события завершения выполнения. Два слушателя никогда не будут работать одновременно.

+0

спасибо. Поэтому правильно ли я понимаю, что, когда событие (событие 1) «отправлено», все слушатели для него находятся в очереди и будут запускаться один за другим, все перед слушателями для событий, отправленных после события 1? – user3250365

+0

@ user3250365: Да, они всегда запускаются один за другим. См. Также [запуск события] (https://dom.spec.whatwg.org/#concept-event-fire) и [диспетчерские события] (https://dom.spec.whatwg.org/#concept-event- отправка). В этом случае, похоже, не задействована даже очередь событий. – Bergi

Смежные вопросы