LB777
@LB777

Как правильно сделать запрос POST в XMLHttpRequest, что бы получить ответ от сервера?

Зада: серверу отправить логин, пароль и от него получить ответ 200 и сообщение.

Написал:

function getXmlHttp(){
    var xmlhttp;
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            xmlhttp = false;
        }
    }
    if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
        xmlhttp = new XMLHttpRequest();
    }
    return xmlhttp;
}

function httpRequestPost(){
    var xmlhttp = getXmlHttp();
    xmlhttp.open("POST",  "http://site.ru/request", true);
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
    xmlhttp.send("user=user_user&data=15685418");
    xmlhttp.onreadystatechange = function(){ 
            if (xmlhttp.readyState == 4) {
                if(xmlhttp.status == 200) {
                    alert(xmlhttp.responseText);
                } else {
                    alert(xmlhttp.status );
                }
            }
        };
}


В итоге данные на сервер отправляются, а ответ (xmlhttp.status) ловит со статусом 0. Но фидлер показывает, что ответ на этот запрос был со статусом 200 и данными (сообщением) пришли.

Как сделать так, что бы можно было в этом же скрипте отловить ответ от сервера на мой запрос?
  • Вопрос задан
  • 7051 просмотр
Решения вопроса 1
mlnkv
@mlnkv
JavaScript Developer
youmightnotneedjquery.com

IE8+
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 && this.status < 400) {
      // Success!
      var resp = this.responseText;
    } else {
      // Error :(
    }
  }
};
request.send(data);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Выше Сергей Мельников ответил Вам....
readyState - это не код, а статус запроса - он принимает 5 состояний, 0,1,2,3 и 4
Код ответа лежит в "status"
для readyState следующие состояния - это для асинхронных запросов
0 - Unitialized
1 - Loading
2 - Loaded
3 - Interactive
4 - Complete
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы