Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 15.03.2018
Сообщений: 79
1

Не могу получить ответ XMLHttpRequest

06.03.2020, 17:57. Показов 2389. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Такая вот проблемка возникла - отправляю пост запрос на сервер и нужно получить ответ. Запрос отправляется верно, но xhr.onload не срабатывает вообще.

Хорошо, пробую xhr.onreadystatechange - он срабатывает, но вместо ответа я получаю пустоту в алерт или null, если явно указываю, что формат ответа json(хотя он и так в таком формате).

xhr.status выдаёт 0

Но суть в том, что запрос отправляется верно и ответ с нужными данными приходит - это я вижу через сниффер HttpAnalyzer

Добавлено через 5 минут
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
function SendData(){
var a = "1";
var b = "2";
let formData = new FormData();
formData.append("FirstParameter", a);
formData.append("SecondParameter", b);
let xhr = new XMLHttpRequest();
xhr.open("POST", "https://mysite.ru", true);
xhr.send(formData);
xhr.onload = function() {
alert(xhr.response);
};
};
Добавлено через 35 минут
Пробую сделать тоже самое с fetch, запрос вообще не отправляется.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function SendData(){
var a = "1";
var b = "2";
let formData = new FormData();
formData.append("FirstParameter", a);
formData.append("SecondParameter", b);
let response = await fetch('https://mysite.ru', {
  method: 'POST',
  body: formData
});
 
let result = await response.json();
alert(result.message);
};
Подозреваю, что ошибка где-то в formData
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.03.2020, 17:57
Ответы с готовыми решениями:

XMLHttpRequest ждет ответ
Подскажите пожалуйста по такому вопросу. Делаю XMLHttpRequest запрос. Код примерно такой: ...

XMLHttpRequest: не приходит ответ от сервера
Всем привет! В теле страницы имею это: <input type="text" id="name" name="login"...

XmlHttpRequest запрос (отправка данных на label и ответ с сайта)
Имеется блокнот с неким словом на русском языке, к примеру, словом "мама". Нужно отправить это...

Не могу сделать запрос XMLHttpRequest (POST)
Подскажите рабочий пример POST запроса, ничего не нашел, другие примеры пробовал - они не работают,...

10
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
06.03.2020, 19:22 2
Попробуйте переменные var задавать.

Добавлено через 3 минуты
https://xmlhttprequest.ru/
Там же в зависимости от браузера перебираются все возможные(2-3) объекты и создается тот, который возможно.

Добавлено через 2 минуты
Сделайте как здесь
https://learn.javascript.ru/ajax-xmlhttprequest
В open GET, а не POST.
0
1 / 1 / 0
Регистрация: 15.03.2018
Сообщений: 79
06.03.2020, 19:29  [ТС] 3
Цитата Сообщение от FFPowerMan Посмотреть сообщение
Сделайте как здесь
https://learn.javascript.ru/ajax-xmlhttprequest
В open GET, а не POST.
Именно этот материал читал, проблема в том конкретно, что запрос отправляется успешно и с заданными параметрами, но ответ не выводится и onload не отрабатывает. При том, что в сниффере видно ответ

Цитата Сообщение от FFPowerMan Посмотреть сообщение
Там же в зависимости от браузера перебираются все возможные(2-3) объекты и создается тот, который возможно.
Не понял этот момент
0
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
06.03.2020, 19:35 4
В первой ссылке посмотри.
0
1 / 1 / 0
Регистрация: 15.03.2018
Сообщений: 79
06.03.2020, 19:58  [ТС] 5
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function SendData(){
var a = "1";
var b = "2";
let formData = new FormData();
formData.append("FirstParameter", a);
formData.append("SecondParameter", b);
let xhr = new XMLHttpRequest();
xhr.open("POST", "https://mysite.ru", true);
xhr.send(formData);
xhr.onreadystatechange = function() { // (3)
  if (xhr.readyState != 4) return;
 
  alert('Готово!');
 
  if (xhr.status != 200) {
    alert(xhr.status + ': ' + xhr.statusText);
  } else {
    alert(xhr.responseText);
  }
 
}
};
Попробовал как здесь описано https://learn.javascript.ru/ajax-xmlhttprequest

Получаю "Готово!" и "0:"

Судя по этому, мы видим, что запрос завершен (readyState=4), статус запроса 0

Как это понимать-то?

Добавлено через 5 минут
Ещё момент непонятный для меня - мой запрос кроссдоменный. По идее он не должен выполняться, но он выполняется

Хорошо, я могу предположить, что запрос выполняется, но ответ не будет приниматься браузером, но ведь нет - этим же методом(только гет) я парсю курс биткоин с https://blockchain.info/ticker и всё отрабатывает успешно

Добавлено через 2 минуты
Самое обидное, что в сниффере я вижу все те данные ответа, которые мне нужны, а скрипт их не видит

Добавлено через 13 минут
Интересный момент - проблема с конкретным сайтом, этот же скрипт с другим сайтом отдает данные на ура.

Да, можно предположить, что какая-то защита на нем, но тогда бы ответ не был бы виден и снифферу, сервер тогда бы просто не отдавал данные.

В чём может быть причина такого?
0
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
06.03.2020, 20:02 6
Что Вы пытаетесь получить? Я так понимаю, что нужно получить какой-то файл.
0
1 / 1 / 0
Регистрация: 15.03.2018
Сообщений: 79
06.03.2020, 20:03  [ТС] 7
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
xhr.open("POST", "https://mysite.ru", true);
xhr.send(formData);
xhr.onreadystatechange = function() { // (3)
  if (xhr.readyState != 4) return;
 
  alert('Готово!');
 
  if (xhr.status != 200) {
    alert(xhr.status + ': ' + xhr.statusText);
  } else {
    alert(xhr.responseText);
  }
 
}
По этим условиям мы получаем алерт со статусом запроса, если ответ сервера НЕ равен 200 и таки да, мы его получаем

Но в то же время в сниффере статус 200ОК и данные есть

Вообще ничего не понимаю

Добавлено через 47 секунд
Цитата Сообщение от FFPowerMan Посмотреть сообщение
Что Вы пытаетесь получить? Я так понимаю, что нужно получить какой-то файл.
Нет, отправить данные запроса и получить json ответ
0
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
06.03.2020, 20:06 8
На другой странице посмотрел - тоже GET-запрос.

Добавлено через 1 минуту
Цитата Сообщение от Gastiganto Посмотреть сообщение
Нет, отправить данные запроса и получить json ответ.
- может это 2 разных запроса?
0
1 / 1 / 0
Регистрация: 15.03.2018
Сообщений: 79
06.03.2020, 20:41  [ТС] 9
Цитата Сообщение от FFPowerMan Посмотреть сообщение
На другой странице посмотрел - тоже GET-запрос.
Да тут уже проблема не в запросе, он отправляется корректно.

Проблема в получении ответа

Добавлено через 2 минуты
Цитата Сообщение от FFPowerMan Посмотреть сообщение
может это 2 разных запроса?
Я же объясняю - отправляется один запрос с параметрами(он отправляется успешно) и в ответ приходят данные json

В сниффере я вижу один запрос и данные ответа от сервера

Почему этих данных не видит браузер...

Добавлено через 32 минуты
Хмм, проблема в кроссдоменном запросе - конкретно этот сервер запрещает запросы с других доменов, что весьма печально

Но всё-равно не ясно, почему в таком случае сниффер всё-равно получает ответ

Загадка
0
Эксперт JS
6492 / 3903 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
06.03.2020, 21:01 10
Цитата Сообщение от Gastiganto Посмотреть сообщение
почему в таком случае сниффер всё-равно получает ответ
Сниффер работает как серверное приложение. А для сервера не существует кросс-доменного запрета.

Gastiganto, целенаправленно поставлена задача использовать супер-устаревший класс XMLHttpRequest ?
Уже пять лет можно fetch использовать.
0
1 / 1 / 0
Регистрация: 15.03.2018
Сообщений: 79
06.03.2020, 21:11  [ТС] 11
Цитата Сообщение от amr-now Посмотреть сообщение
Уже пять лет можно fetch использовать
Это абсолютно никак не поможет решить проблему кроссдоменных запросов

Добавлено через 1 минуту
Цитата Сообщение от amr-now Посмотреть сообщение
Сниффер работает как серверное приложение.
Да, но запрос-то исходит от браузера - следовательно несмотря на запрет, запрос отсылается
0
06.03.2020, 21:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2020, 21:11
Помогаю со студенческими работами здесь

Не могу получить ICMP ответ
Доброго времени суток, проблема вот в чем: По протоколу UDP отправляется пакет с заведомо...

Не могу получить ответ от сервера
Здравствуйте, не знал как правильно описать проблему в поисковике, поэтому пишу вам. Есть сайт...

Не могу получить ответ с сайта VBA
Доброе время суток. Из Access необходимо получить информацию с сайта Написан следующий код: Dim...

Не могу получить ответ от телеграмм бота
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters updater =...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru