Я новичок в XMLHttpRequest. Я не понимаю, почему мы пишем функцию onload() перед функцией send(). Функция onload() обрабатывает ответ, который мы получаем, и send() функция отправляет запрос на сервер. Поэтому onload() должен быть записан после функции send() в соответствии с моим пониманием. Может кто-нибудь помочь понять это.
var xmlhttp = new XMLHttpRequest(),
method = 'GET',
url = 'https://developer.mozilla.org/';
xmlhttp.open(method, url, true);
xmlhttp.onload = function () {
// Do something with the retrieved data
};
xmlhttp.send();
Я не понимаю, почему мы пишем функцию
onload()
перед функциейsend()
.
Чтобы обработчик нагрузки был установлен до отправки запроса, поскольку отправка запроса приведет к вызову обработчика (в случае успеха).
Функция
onload()
обрабатывает ответ, который мы получаем, иsend()
функция отправляет запрос на сервер. Поэтомуonload()
должен быть записан после функцииsend()
в соответствии с моим пониманием.
Она вызывается после send
называется (по XHR инфраструктура) (или потенциально во время). Когда вы назначаете его для onload
, вы не вызываете его. Вы просто определяете его так, чтобы он там, когда XHR нужно было его назвать.
Вот что происходит:
load
(в вашем случае, назначая функцию onload
).send
. load
. Это ищет любых зарегистрированных в настоящий момент обработчиков для запросов load
и очередей для этих обработчиков, если они есть. Эти вызовы запускаются, как только основной поток JavaScript доступен для их запуска. Очень часто вы избегаете делать это неправильно, потому что к моменту завершения запроса вы поместите туда обработчик load
; но не всегда. load
- это событие. Если запрос может быть немедленно удовлетворен (например, из кеша), браузер может запустить load
во время send
, и посмотреть, есть ли какой-либо обработчик load
во время send
вызова, а если нет, то нет очереди на вызов любой обратный вызов. Позже, когда вы прикрепляете обработчик, событие уже было запущено (когда ни один не был прикреплен).
Поэтому вы должны приложить обработчик перед вызовом send
.
load
после вызова send
.