@ilovv
Нуб, нуждающийся в помощи в php

Почему код выполняется асинхронно?

Код:
var json = '';
	function reqListener () {
		var data = this.responseText;
		alert(this.responseText);
		json = JSON.parse(data);
	}

	var oReq = new XMLHttpRequest();
	oReq.addEventListener("load", reqListener);
	oReq.open("GET", "href");
	oReq.send();
	alert(json);
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Вот здесь вы вешаете слушателя события. И он сидит себе и ждет:
oReq.addEventListener("load", reqListener);
Дальше вы инициируете вызов - это как ввести адрес сайта в браузере и нажать ввод. Но интернет медленный, сайт тормозной. Пройдет какое-то время.

И вот, наконец, когда страница соизволит загрузиться, выстрелит событие "load", которое и будет отловлено слушателем - выполнится, наконец-то, функция reqListener()

Разрыв, рвущий нить выполнения этого кода и делающий его из синхронного асинхронным – где-то внутри объекта XMLHttpRequest и не виден невооруженным глазом.

Теоретически, внутри мог бы быть и синхронный код, который по методу send() сразу же явно дергал функцию, которую мы передали как слушателя события. Но это был бы уже не тот XMLHttpRequest, каким мы его любим.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Robur
@Robur
Знаю больше чем это необходимо
Потому что это асинхронный код. Какого еще ответа вы ждали?
Ответ написан
Комментировать
hzzzzl
@hzzzzl
по той же причине, что когда пишешь пост на тостер, он не появляется сразу же с комментариями

// это твой вопрос
var oReq = new XMLHttpRequest();
oReq.send();


function reqListener () {
  ......
  json = JSON.parse(data); // <- это мой ответ
}


oReq.send(); // задаешь вопрос
alert(json);  // и сразу пишешь мой ответ, пока я еще не ответил
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы