Моя функция 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("");
После этого запроса я хочу передать ответ обратно от этой страницы и поймать его на стороне клиента. Как я делаю это?
Чтобы получить ответ от 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);
Вы можете ознакомиться со следующей статьей для дальнейшего чтения по теме:
Чтобы получить ответ, добавьте функцию-обработчик события 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');
Вам нужно сделать немного больше , чтобы он работал в разных браузерах, но как только это будет сделано, вы получите многоразовую функцию без какой-либо библиотеки.
// 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;
}