@Romeo4755

Синхронные запросы на JS XMLHttpRequest — как теперь его осуществлять?

Скажите, как в 2020 году осуществить задачу синхронного запроса XMLHttpRequest.
То есть надо остановить выполнение сценария до ответа с сервера (или вообще его закончить, если ответ не придет в течение, например, минуты).
Асинхронные запросы уродуют логику программы - приходится вызывать следующее действие не из четкого списка последовательных действий, а из функций, раскиданных по разным скриптам. Хочется иметь возможность выполнить именно синхронный запрос - но о нем так много негативной информации за разное время, что непонятно, что можно делать на сегодняшний момент, что нельзя.
Например, у меня не срабатывает такой код. Почему - не знаю, то ли у меня ошибка, то ли так уже нельзя.
var request = new XMLHttpRequest();
 request.open('POST', 'baseindex_numberoflines.php');// from sellers
 request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send("nameoftable="+atabname);
if(request.status == 200) {
    newdata = request.responseText;
  	document.getElementById ("newinfo").innerHTML = newdata;
}
  • Вопрос задан
  • 46 просмотров
Пригласить эксперта
Ответы на вопрос 2
yarkov
@yarkov Куратор тега JavaScript
https://github.com/yarkovaleksei/toster-extension
Асинхронные запросы уродуют логику программы

Спасибо, поржал =)

По сабжу. Учите матчасть.

Но на всякий случай процитирую документацию:
«Синхронный запрос» означает, что после вызова xhr.send() и до ответа сервера главный поток будет «заморожен»: посетитель не сможет взаимодействовать со страницей – прокручивать, нажимать на кнопки и т.п. После получения ответа выполнение продолжится со следующей строки.


Я бы за это по рукам палкой бил.
Ответ написан
@Che603000
c 2011 javascript
Скажите, как в 2020 году осуществить задачу синхронного запроса .

в 2020 году не стоит использовать XMLHttpRequest используйте window.fetch
https://learn.javascript.ru/fetch

Асинхронные запросы уродуют логику программы

В js асинхронность это норма. Для упрощения кода можно использовать Promise
https://learn.javascript.ru/promise

Для примера псевдокод ниже
fetch('baseindex_numberoflines.php', {method: 'post' , body: {id: '735474'}})
    .then(newdata=> { 
        // блок 1 - выполнится после успешного запроса
       document.getElementById ("newinfo").innerHTML = newdata );
       return "test"
    })
    .then(test=> { 
        // выполнится после блок 1
    })
    .catch(err=>{
      // блок выполнится после ошибки
    }
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы