Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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 дебажил ход выполнения и статуса. Получил вот это:
Ответить с цитированием
  #2 (permalink)  
Старый 29.08.2016, 11:46
Аспирант
Отправить личное сообщение для scrollquest Посмотреть профиль Найти все сообщения от scrollquest
 
Регистрация: 21.08.2016
Сообщений: 77

Сообщение от Spirtikys
this.readyState != 4 && this.status != 200
это условие не срабатывает как Вы ожидаете. Например, readyState == 3, а status == 200 -- условие не выполнилось, выхода из ф-ции не произошло. То есть код, который ниже, исполняется многократно. Пишите ==4 && status == 200){/*code*/}

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

Сообщение от scrollquest Посмотреть сообщение
это условие не срабатывает как Вы ожидаете. Например, readyState == 3, а status == 200 -- условие не выполнилось, выхода из ф-ции не произошло. То есть код, который ниже, исполняется многократно. Пишите ==4 && status == 200){/*code*/}
Добра вам добрый человек) Тупанул, спасибо =/
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не приходит ответ с запроса AJAX Taranse AJAX и COMET 1 07.02.2016 14:42
ответ от сервера (ajax) gam0ra Общие вопросы Javascript 3 16.12.2014 15:11
ajax json ответ от сервера в ошибке imedia Элементы интерфейса 4 16.06.2014 12:20
ajax, ответ сервера DeUM AJAX и COMET 2 10.02.2014 10:58
Ajax - JSON - не распознает пришедший ответ Майский Кот jQuery 1 14.05.2009 00:40