Показать сообщение отдельно
  #1 (permalink)  
Старый 29.08.2016, 10:54
Аватар для Spirtikys
Аспирант
Отправить личное сообщение для Spirtikys Посмотреть профиль Найти все сообщения от Spirtikys
 
Регистрация: 30.12.2015
Сообщений: 49

Двойной ответ по AJAX
Добрый день.
Не смог понять причину такой реакции, надеюсь тут объяснят.
var btn = document.querySelector('button');

    btn.onclick = function loadPhones() {
        var xhr = new XMLHttpRequest();

        xhr.open('GET', 'phones.json', true);
        xhr.send();

        xhr.onreadystatechange = function () {
            if (this.readyState != 4) return;

            if (this.status != 200) {
                alert(`Error: ${this.status}, ${this.statusText}`)
            }

            let ul = document.createElement('ul');
            let phones = JSON.parse(this.responseText);

            for (let value of phones) {
                let li = document.createElement('li');
                li.textContent = value.name;
                ul.appendChild(li);
            }

            document.body.appendChild(ul);

            btn.innerHTML = `Загружено`;
            btn.disabled = `true`;
        }
    }

Проблема в том, что если я изменю условия на
if (this.readyState != 4 && this.status != 200) return;

То получу ошибку и 2 списка с телефонами. Если кому не сложно, можете объяснить?

p.s. Если я не ошибся, то повторяется лишь stage 3 , до получения всего пакета, то есть переход на 4 лишь 1 раз, в конце, через console.log дебажил ход выполнения и статуса. Получил вот это:
Ответить с цитированием