Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750

Ожидание ответа сервера

01.04.2019, 22:18. Показов 12895. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла необходимость на html-странице автоматически отправлять запрос серверу через определённые интервалы времени.
Сделал скрипт:
PHP/HTML
1
2
3
<script type=\"text/javascript\">
    setInterval(document.location.search  = 'auto', 5000);
</script>
Но проблема в том, что если сервером обрабатывается предыдущий запрос этого же клиента, то при выполнении search = 'auto' клиент не дожидается предыдущего ответа сервера.
Можно ли в скрипте как-то указать, чтобы клиент сначала дождался неполученного ответа, а затем выполнял document.location.search = 'auto' ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.04.2019, 22:18
Ответы с готовыми решениями:

Распарсить объект ответа сервера
День добрый. Изучаю JS, дошел до ajax и решил тренироваться на сервисе яндекс-переводчика. Но столкнулся с объектом, название которого...

Ожидание сообщений от сервера
Здравствуйте, пишу многопользовательскую игру змейка на джава скрипте. Реализовано управление змейкой с помощью клавиатуры ...

Парсинг ответа сервера ajax
Здравствуйте, ответ от сервера приходит в формате json, вида: {&quot;asd&quot;:true,&quot;aaa&quot;:&quot;$&quot;,&quot;html&quot;:}. Нужно распарсить и вызвать функцию...

30
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
06.04.2019, 19:24
Студворк — интернет-сервис помощи студентам
LVV, повторюсь, я плюсы не знаю
но WebSocket это такая технология при которой соединение устанавливается один раз и остается открытым, до тех пор пока одна из сторон не оборвёт соединение.
на сервере, написанном на Node.js, могу пример привести как отслеживается событие close, т.е. разрыв соединения
1
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
07.04.2019, 04:35  [ТС]
Всем спасибо!
Особенно,atanov, за подсказку использовать XMLHttpRequest.
Сделал так:
JavaScript
1
2
3
4
5
6
7
8
9
<script type="text/javascript">
var a=new XMLHttpRequest();
function autoRequest()
{
a.open('GET', 'auto', true);
a.send();
}
setInterval('autoRequest()', 1000);
</script>
Всё отлично работает! Автозапросы не мешают запросам пользователей! Как я и хотел.
0
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
07.04.2019, 17:28  [ТС]
Cделал динамическое обновление web-странички через сокеты средствами XMLHttpRequest
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html>
<body>
<script type = 'text/javascript'>
    var sendInfo = new XMLHttpRequest();
        function sendRequest()
        {
            sendInfo.open('GET', 'auto', true);
            sendInfo.send();
                if(sendInfo.readyState == 4)
                {
                document.getElementById('result').textContent = sendInfo.responseText;
                }
        }
setInterval('sendRequest()', 5000);
</script>
</head>
 
<body>
   <p id='result'>abcd</p>
</body>
</html>
но не хочет читать текст ответа сервера...
Почему?

А так работает:
document.getElementById('result').textContent = 'qwert';
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13441 / 7534 / 831
Регистрация: 09.09.2009
Сообщений: 29,554
07.04.2019, 17:31
вывод в элемент с ид countdown значения счетчика count:
JavaScript
1
2
    var valFild1 = document.getElementById("countdown");
    valFild1.innerText = valFild1.textContent = count;
1
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
07.04.2019, 18:04  [ТС]
Сделал аналогично:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>
<body>
<script type = 'text/javascript'>
    var sendInfo = new XMLHttpRequest();
        function sendRequest()
        {
            sendInfo.open('GET', 'auto', true);
            sendInfo.send();
               var vf = document.getElementById('result');
           vf.innerText = vf.textContent = sendInfo.responseText;
               
        }
setInterval('sendRequest()', 5000);
</script>
</head>
 
<body>
   <p id='result'>abcd</p>
</body>
</html>
не работает.

А так работает.
var vf = document.getElementById('result');
vf.innerText = vf.textContent = 'qwert';
Наверное проблема в sendInfo.responseText.
Или в ответе серера (хотя проверял, ответ корректный)

Добавлено через 12 минут
А так не работает:
if(sendInfo.readyState == 4)
{
var vf = document.getElementById('result');
vf.innerText = vf.textContent = 'qwert';
}

Значит, почему-то скрипт не принимает ответ сервера....
Почему?
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13441 / 7534 / 831
Регистрация: 09.09.2009
Сообщений: 29,554
07.04.2019, 18:16
попробуйте увидеть ваш ответ от сервера, добавив например
JavaScript
1
 alert(sendInfo.responseText)
1
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
07.04.2019, 18:42  [ТС]
Сделал.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script type = 'text/javascript'>
var sendInfo = new XMLHttpRequest();
function sendRequest()
{
sendInfo.open('GET', 'auto', true);
sendInfo.send();
       if(sendInfo.readyState == 4)
       {
        var vf = document.getElementById('result');
        vf.innerText = vf.textContent = sendInfo.responseText;
        alert(sendInfo.responseText)\
       }
}
setInterval('sendRequest()', 5000);
</script>
Ничего не выводит.

А так:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
<script type = 'text/javascript'>
var sendInfo = new XMLHttpRequest();
function sendRequest()
{
sendInfo.open('GET', 'auto', true);
sendInfo.send();
       
        var vf = document.getElementById('result');
        vf.innerText = vf.textContent = sendInfo.responseText;
        alert(sendInfo.responseText)\
}
setInterval('sendRequest()', 5000);
</script>
просто запрашивает: "Подтвердите действие на странице такой-то ..." и тоже ничего не выводит.

Вот полный ответ сервера:
HTTP/1.1 200 OK
Content-Type: text/html; charset=windows-1251
Content-Length: 5

qwert

Может контент qwert нужно в какие-то теги заключить?

Добавлено через 8 минут
alert(sendInfo.readyState);
Выводит 1
Посмотрел, что это значит.
1 OPENED Метод open() был вызван.
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13441 / 7534 / 831
Регистрация: 09.09.2009
Сообщений: 29,554
07.04.2019, 18:45
у меня когда-то было так (найдено на просторах интернета):
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
        var http = new XMLHttpRequest();
        var url = "/index.php/test/";
        http.open("POST", url, true);
        //Send the proper header information along with the request
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http.onreadystatechange = function() { //Call a function when the state changes.
            if(http.readyState == 4 && http.status == 200)
            {
            // тут действиия, если получен правильный ответсо статусом 200
            // по идее,именно тут и надо что-то предпринимать с http.responseText
            }
        }
        http.send();
1
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
07.04.2019, 20:09  [ТС]
Цитата Сообщение от Dmitry Посмотреть сообщение
у меня когда-то было так
Ну, если переделать Ваш код под мои GET-запросы, то получится почти то же самое.

Я вот не пойму, почему alert(sendInfo.readyState); выдаёт 1.
Ну хотя бы 2 выдавало (Был вызван метод send() и получены заголовки ответа (response headers)).
Значит скрипт не читает даже заголовка ответа сервера.

Хотя запросы приходят
GET /auto HTTP/1.1
Host: 192.168.0.103:8002
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36
DNT: 1
Accept: */*
Referer: [url]http://192.168.0.103:8002/glav?lg=[/url]..................................
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6


и ответы сервер отправляет:
HTTP/1.1 200 OK
Content-Type: text/html; charset=windows-1251
Content-Length: 5

qwert


Добавлено через 54 минуты
Наверное, где-то должно быть sendInfo.onload
но куда его лепить... и как?
Это не помогло.

Добавлено через 3 минуты
Вопрос не решен, ответы сервера не читаются...
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html>
<body>
<script type = 'text/javascript'>
    var sendInfo = new XMLHttpRequest();
        function sendRequest()
        {
            sendInfo.open('GET', 'auto', true);
            sendInfo.send();
                if(sendInfo.readyState == 4)
                {
                document.getElementById('result').textContent = sendInfo.responseText;
                }
        }
setInterval('sendRequest()', 5000);
</script>
</head>
 
<body>
   <p id='result'>abcd</p>
</body>
</html>
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
08.04.2019, 10:00
Лучший ответ Сообщение было отмечено LVV как решение

Решение

Цитата Сообщение от LVV Посмотреть сообщение
Я вот не пойму, почему alert(sendInfo.readyState); выдаёт 1.
Вам уже дали ответ
Цитата Сообщение от Dmitry Посмотреть сообщение
JavaScript
1
http.onreadystatechange = function() { //Call a function when the state changes.
https://devdocs.io/dom/xmlhttp... ttprequest

Добавлено через 56 секунд
Что-то наподобие у вас должно быть
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        var sendInfo = new XMLHttpRequest();
        
        function requestListener = function () {
            document.getElementById('result').textContent = this.responseText;
        }
        
        sendInfo.addEventListener('load', requestListener);
 
        function sendRequest() {
          sendInfo.open('GET', 'auto', true);
          sendInfo.send();
        }
        
        setInterval(sendRequest, 5000);
1
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
09.04.2019, 19:29  [ТС]
Спасибо, j2FunOnly.
Чуть подправил код, и всё заработало!
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var sendInfo = new XMLHttpRequest();
        
        function requestListener() {
            document.getElementById('result').textContent = this.responseText;
        }
        
        sendInfo.addEventListener('load', requestListener);
 
        function sendRequest() {
          sendInfo.open('GET', 'auto', true);
          sendInfo.send();
        }
        
        setInterval(sendRequest, 5000);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.04.2019, 19:29
Помогаю со студенческими работами здесь

Не понятный формат данных ответа сервера
Посылаю запрос на сторонний сервер, а он выдает ответ в таком формате 8212&lt;!&gt;&lt;!&gt;0&lt;!&gt;5968&lt;!&gt;0&lt;!&gt; Здесь html...

Как получить код ответа сервера?
Есть какая нибудь функция, чтобы узнать код ответа? Типа даёшь урл, а он тебе возвращает 200, 404 и т.п.?

Почему XmlHttpRequest не выводит alert с кодом ответа сервера?
&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Title of the document&lt;/title&gt; &lt;script&gt; // 1. Создаём новый объект XMLHttpRequest ...

Как получить и вывести код ответа сервера при запросах по протоколу HTTP?
Всем привет! Cкажите, плиз, как получить и вывести код ответа сервера при запросах по протоколу HTTP на языке программирования HTML,...

Ожидание ответа от сервера
Клиент1 шлет серверу запрос, в котором содержатся координаты. Координаты заносятся в БД на поле. Клиент2 шлет серверу тот же запрос, но с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru