Получите ответ от сервера с JavaScript после запроса JavaScript

Моя функция JavaScript запрашивает к aspx странице. Код İts:

 var xhr = ("XMLHttpRequest" in window) ? new XMLHttpRequest() : new ActiveXObject("Msxml3.XMLHTTP");
    xhr.open("GET", = 'http://www.example.net/abc.aspx', true);
    xhr.send(""); 

После этого запроса я хочу передать ответ обратно от этой страницы и поймать его на стороне клиента. Как я делаю это?

6
задан Waynn Lue 6 March 2012 в 13:13
поделиться

3 ответа

Чтобы получить ответ от XMLHttpRequest в асинхронном режиме (третий параметр - true для метода open()), необходимо установить свойство onreadystatechange в функцию обратного вызова. Эта функция будет вызвана, когда ответ будет готов в браузере:

xhr.open("GET", 'http://www.example.net/abc.aspx', true);
xhr.onreadystatechange = function() {
  if (xhr.readyState === 4)  { 
    var serverResponse = xhr.responseText;
  }
};
xhr.send(null);

Вы можете ознакомиться со следующей статьей для дальнейшего чтения по теме:

7
ответ дан 9 December 2019 в 20:39
поделиться

Чтобы получить ответ, добавьте функцию-обработчик события readystatechange. Она будет вызвана, когда ответ будет готов к чтению:

xhr.onreadystatechange= function() {
    if (this.readyState!==4) return; // not ready yet
    if (this.status===200) { // HTTP 200 OK
        alert(this.responseText);
    } else {
        // server returned an error. Do something with it or ignore it
    }
};
xhr.open('GET', 'http://www.example.net/abc.aspx', true);
xhr.send();

Кстати:

("XMLHttpRequest" in window)

Хотя in в целом является хорошим способом проверки существования свойства, это одно из немногих мест, где он не идеален.

Проблема в том, что в IE7+, когда опция 'native XMLHttpRequest' выключена, XMLHttpRequest все еще существует как свойство в window, но с непригодным значением null. Поэтому в данном конкретном случае лучше использовать простой тест на истинность, который позволит вернуться к ActiveX в том (маловероятном) случае, если эта опция отключена:

var xhr= window.XMLHttpRequest? new XMLHttpRequest() : new ActiveXObject('MSXML2.XMLHttp');
3
ответ дан 9 December 2019 в 20:39
поделиться

Вам нужно сделать немного больше , чтобы он работал в разных браузерах, но как только это будет сделано, вы получите многоразовую функцию без какой-либо библиотеки.

// making a call is as simple as this
ajax( "http://www.example.net/abc.aspx", function( data ){
    // do something with the server's response
    alert(data);
});

///////////////////////////////////////////////////////////////////////////////

function getXmlHttpObject() {
    var xmlHttp;
    try {
        // Firefox, Opera 8.0+, Safari
        xmlHttp = new XMLHttpRequest();
    } catch (e) {
        // Internet Explorer
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    if (!xmlHttp) {
        alert("Your browser does not support AJAX!");
    }
    return xmlHttp;
}


function ajax(url, onSuccess, onError) {

    var xmlHttp = getXmlHttpObject();

    xmlHttp.onreadystatechange = function() {
      if (this.readyState === 4) {

            // onSuccess
            if (this.status === 200 && typeof onSuccess == 'function') {
                onSuccess(this.responseText);
            }

            // onError
            else if(typeof onError == 'function') {
                onError();
            }

        }
    };
    xmlHttp.open("GET", url, true);
    xmlHttp.send(null);
    return xmlHttp;
}​
2
ответ дан 9 December 2019 в 20:39
поделиться
Другие вопросы по тегам:

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