LB777
@LB777

Как в XMLHttpRequest readyState и status получать одновременно?

Если я пишу
var request = new XMLHttpRequest();
request.open('POST', '/my/url', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.onreadystatechange = function() {
  if (this.readyState === 4) {
    if (this.status === 200) {
      // Success!
      var resp = this.responseText;
    } else {
      // Error :(
    }
  }
};
request.send(data);

То в readyState с начало приходит статут 4, а через какое-то время в status приходит статут 200.
Получается, что со статусом readyState 4 приходит status равным 0 и responseText с пустой строкой.
6e09f88234b242c0b82a25408e02ec83.jpg
Если вставить брекпоинт в строчку request.onreadystatechange = function() { , что бы он повисел немного, то в status придет ответ 200 и в responseText сообщение от сервера.
Есть ли какое-нибудь событие, которое ждет статус не 0 в status?
Или как это можно самому реализоваться это событие?
  • Вопрос задан
  • 504 просмотра
Решения вопроса 1
LB777
@LB777 Автор вопроса
Проблема заключалась в том, что у кнопки формы тип стоя submit и на сервере не хватало заголовков для кросдоменной работы.
Кнопке поменял атрибут на type="button" и на сервере дописали пачку заголовков:
var result = new HttpResponseMessage();
result.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
result.Headers.Add("Access-Control-Allow-Methods", new[] { HttpMethod.Post.Method, HttpMethod.Get.Method });
result.Headers.Add("Access-Control-Allow-Headers", new[] { "*" });
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Все встреченные мной случаи возврата статуса 0 означает либо кросс-доменный запрос без разрешения сервера, либо нарушения в работе локального сервера.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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