Общее представление об AJAX. Часть 6
Извлечение HTTP-заголовков
Метод getAllResponseHeaders() объекта XMLHttpRequest возвращает все HTTP-заголовки, полученные от сервера, тогда как метод getResponseHeader() - только один конкретный заголовок. В слуедующем фрагменте кода демонстрируется, каким образом извлекается информация о типе используемого Web-сервера:
XMLHttp.open("GET", "sometext.txt", true);
XMLHttp.onreadystatechange = handlerFunction;
XMLHttp.send(null);
function handlerFunction() {
if (XMLHttp.readyState == 4) {
var servertype = XMLHttp.getResponseHeader("Server");
window.alert("Web server used: " + servertype);
}
}
function getXMLHttp() {
var XMLHttp = null;
if (window.XMLHttpRequest) {
try {
XMLHttp = new XMLHttpRequest();
} catch (e) { }
} else if (window.ActiveXObject) {
try {
XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) { }
}
}
return XMLHttp;
}
Получение XML-данных от сервера
Свойство responseText отлично подходит для обработки ограниченного количества неструктурированных данных. Однако более более изящный подход к обработке сложных, структурированных данных в приложении AJAX предоставляет свойство responseXML. При обращении к этому свойству будет получен ответ на запрос HTTP в виде объекта XML DOM языка JavaScript, но при условии, что сервер возвращает действительные данные XML. в противном случае будет получено пустое значение null.
Доступ к подобным данным объекта XML осуществляется таким же образом, как и к элементам DOM из кода JavaScript. Для данного примера кода используется следующий XML-файл books.xml:
<book pubdate="2006">
<title>JavaScript Phrasebook</title>
<publisher>Sams Publishing</publisher>
</book>
<book pubdate="2006">
<title>MySQL Phrasebook</title>
<publisher>Sams Publishing</publisher>
</book>
<book pubdate="2005">
<title>PHP Phrasebook</title>
<publisher>Sams Publishing</publisher>
</book>
</books>
Для того, чтобы браузеры могли прочитать этот XML-файл (особо строгими правилами в этом отношении отличается Internet Explorer), клиенту должен быть отправлен правильный тип MIME, а именно: text/xml. Этот тип указывается в свойстве mime.types файла конфигурации Apache.
С другой стороны, сценарий на сервере может сам предоставить файл с правильным типом MIME:
header('Content-type: text/xml');
readfile('books.xml');
?>
В следующем фрагменте кода осуществляется доступ к данным из XML-файла с использованием структуры DOM:
XMLHttp.open("GET", "books.xml", true);
XMLHttp.onreadystatechange = handlerFunction;
XMLHttp.send(null);
function handlerFunction() {
if (XMLHttp.readyState == 4) {
var xml = XMLHttp.responseXML;
var book = xml.getElementsByTagName("book");
for (var i=0; i<book.length; i++) {
var pubdate = book[i].getAttribute("pubdate");
var title, publisher;
for (var j=0; j<book[i].childNodes.length; j++) {
if (book[i].childNodes[j].nodeName == "title") {
title = book[i].childNodes[j].firstChild.nodeValue;
} else if (book[i].childNodes[j].nodeName == "publisher") {
publisher = book[i].childNodes[j].firstChild.nodeValue;
}
}
window.alert(title + " by " + publisher + " (" + pubdate + ")");
}
}
}
function getXMLHttp() {
var XMLHttp = null;
if (window.XMLHttpRequest) {
try {
XMLHttp = new XMLHttpRequest();
} catch (e) { }
} else if (window.ActiveXObject) {
try {
XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) { }
}
}
return XMLHttp;
}
Ссылки по теме:
Оставьте свой отзыв