Najnowsze tutoriale tworzenie stron internetowych
 

Obiekt XMLHttpRequest


Wszystkie nowoczesne przeglądarki mają wbudowany obiekt XMLHttpRequest do żądania danych z serwera.

Wszystkie główne przeglądarek posiada wbudowany parser XML na dostęp i manipulowanie XML.


Obiekt XMLHttpRequest

Obiekt XMLHttpRequest może być użyty do żądania danych z serwera WWW.

Obiekt XMLHttpRequest jest a developers dream , ponieważ można:

  • Aktualizacja strony internetowej, bez przeładowania strony
  • Dane zażądać od serwera - po załadowaniu strony
  • Odbieranie danych z serwera - po załadowaniu strony
  • Wysyłanie danych do serwera - w tle

Przykład XMLHttpRequest

Po wpisaniu znaku w polu tekstowym poniżej XMLHttpRequest jest wysyłana do serwera, a niektóre propozycje nazwy są zwracane (from the server) :

Przykład

Start typing a name in the input field below:

Name:

Suggestions:


Wysyłanie XMLHttpRequest

Wszystkie nowoczesne przeglądarki mają wbudowany obiekt XMLHttpRequest.

Częstym składni JavaScript za korzystanie z niego wygląda podobnie jak ta:

Przykład

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
       // Action to be performed when the document is read;
    }
};
xhttp.open("GET", " filename ", true);
xhttp.send();
Spróbuj sam "

Tworzenie obiektu XMLHttpRequest

Pierwsza linia w powyższym przykładzie tworzy objet XMLHttpRequest:

var xhttp = new XMLHttpRequest();

Onreadystatechange Event

Właściwość readyState posiada status XMLHttpRequest.

Impreza onreadystatechange jest uruchamiany za każdym razem gdy readyState zmian.

Podczas żądanie serwera, readyState zmienia się od 0 do 4:

0: nie wymagać zainicjowany
1: Połączenie z serwerem ustanowione
2: wniosek otrzymał
3: Wniosek przetwarzania
4: Prośba wykończone i odpowiedź jest gotowa

W obiekcie onreadystatechange określić funkcję być wykonywane, gdy readyState zmienia:

xhttp.onreadystatechange = function()

Gdy readyState jest 4 i status jest 200, odpowiedź jest gotowa:

if (xhttp.readyState == 4 && xhttp.status == 200)

XMLHttpRequest właściwości i metody

metoda Opis
new XMLHttpRequest() Tworzy nowy obiekt XMLHttpRequest
open( method, url, async ) Określa typ zamówienie
method : typ żądania GET lub POST
url : lokalizacja pliku
async : true (asynchronous) lub fałsz (synchronous)
send() Wysyła żądanie do serwera (used for GET)
send( string ) Wysyła ciąg żądania do serwera (used for POST)
onreadystatechange Funkcja do wywołania kiedy zmiany własności readyState
readyState Stan XMLHttpRequest
0: nie wymagać zainicjowany
1: Połączenie z serwerem ustanowione
2: wniosek otrzymał
3: Wniosek przetwarzania
4: Prośba wykończone i odpowiedź jest gotowa
status 200: OK
Nie znaleziono strony: 404
responseText Dane odpowiedzi jako ciąg
responseXML Dane odpowiedzi jako dane XML

Dostęp między domenami

Ze względów bezpieczeństwa, nowoczesne przeglądarki nie umożliwiają dostępu między domenami.

Oznacza to, że zarówno strona internetowa, a plik XML próbuje załadować, musi znajdować się na tym samym serwerze.

Przykłady na w3ii wszystkie otwarte pliki XML znajdujących się w domenie w3ii.

Jeśli chcesz skorzystać z powyższego przykładu na jednej z własnych stron internetowych, pliki XML, obciążenie musi być położony na własnym serwerze.


ResponseText obiektu

Nieruchomość responseText zwraca odpowiedź w postaci łańcucha.

Jeśli chcesz użyć odpowiedź jako ciąg tekstu, należy użyć właściwości responseText:

Przykład

document.getElementById("demo").innerHTML = xmlhttp.responseText;
Spróbuj sam "

ResponseXML nieruchomości

Nieruchomość responseXML zwraca odpowiedź jako obiekt XML DOM.

Jeśli chcesz użyć odpowiedź jako obiekt XML DOM, należy użyć właściwości responseXML:

Przykład

Żąda plików cd_catalog.xml i używać odpowiedź jako obiekt XML DOM:

xmlDoc = xmlhttp.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName("ARTIST");
for (i = 0; i < x.length; i++) {
    txt += x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
Spróbuj sam "

GET lub POST?

GET jest prostsze i szybsze, niż POST i mogą być używane w większości przypadków.

Jednak zawsze używać żądania POST, kiedy:

  • Buforowane plik nie jest opcją (update a file or database on the server)
  • Wysyłanie dużej ilości danych do serwera (POST nie ma ograniczenia rozmiaru)
  • Przesyłanie danych wprowadzanych przez użytkownika (which can contain unknown characters) , POST jest bardziej wytrzymałe i bezpieczne niż GET

Url - plik na serwerze

Parametr url z open() metoda, to adres do pliku na serwerze:

xmlhttp.open("GET", "xmlhttp_info.txt", true);

Plik może być dowolny rodzaj pliku, podobnie jak .txt i .xml lub pliki skryptów serwerowych jak .asp i .php (który może wykonywać czynności na serwerze przed wysłaniem odpowiedzi do tyłu).


Asynchroniczne - Prawda czy fałsz?

Aby wysłać żądanie asynchronicznie, parametr asynchroniczny z open() metody musi być ustawiona na wartość true:

xmlhttp.open("GET", "xmlhttp_info.txt", true);

Wysłanie zapytania asynchronicznie jest ogromny postęp dla twórców stron internetowych. Wiele zadań wykonywanych na serwerze są bardzo czasochłonne.

Wysyłając asynchronicznie, JavaScript nie trzeba czekać na odpowiedź serwera, ale może zamiast:

  • wykonywanie innych skryptów podczas oczekiwania na odpowiedź serwera
  • czynienia z odpowiedzi, jeśli odpowiedź jest gotowy

Async = true

Podczas korzystania asynchronicznie = true, określ funkcję do wykonania, gdy odpowiedź jest gotowa w onreadystatechange imprezy:

Przykład

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
       document.getElementById("demo").innerHTML = xmlhttp.responseText;
    }
};
xmlhttp.open("GET", "xmlhttp_info.txt", true);
xmlhttp.send();
Spróbuj sam "

Asynchroniczny = false

Aby korzystać asynchronicznie = false, zmień trzeci parametr w open() metoda na false:

xmlhttp.open("GET", "xmlhttp_info.txt", false);

Korzystanie asynchronicznie = false nie jest zalecana, ale dla kilku małych wniosków może to być ok.

Pamiętaj, że JavaScript nie będzie w dalszym ciągu wykonywać, dopóki odpowiedź serwera jest gotowy. Jeśli serwer jest zajęty lub wolny, aplikacja będzie zawiesić lub przerwać.

Note: W przypadku korzystania asynchroniczny = false, nie pisz funkcję onreadystatechange - wystarczy umieścić kod po send() oświadczenie:

Przykład

xmlhttp.open("GET", "xmlhttp_info.txt", false);
xmlhttp.send();
document.getElementById("demo").innerHTML = xmlhttp.responseText;
Spróbuj sam "

XML Parser

Wszystkie nowoczesne przeglądarki mają wbudowany parser XML.

Model obiektowy XML dokumentu (the XML DOM) zawiera wiele metod, aby otwierać i edytować XML.

Jednak zanim można uzyskać dokument XML, to musi być załadowany do obiektu XML DOM.

Parser XML może czytać zwykły tekst i przekształcić go w obiekt XML DOM.


Parsowania ciąg tekstowy

Ten przykład przetwarza ciąg tekstu do obiektu XML DOM i wydobywa z niego informacje z JavaScript:

Przykład

<html>
<body>

<p id="demo"></p>

<script>
var text, parser, xmlDoc;

text = "<bookstore><book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book></bookstore>";

parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");

document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
</script>

</body>
</html>
Spróbuj sam "

Starymi przeglądarkami (IE5 and IE6)

Stare wersje Internet Explorer (IE5 and IE6) nie obsługują obiekt XMLHttpRequest.

Aby obsłużyć IE5 i IE6, należy sprawdzić, czy przeglądarka obsługuje obiekt XMLHttpRequest, albo utworzyć ActiveXObject:

Przykład

if (window.XMLHttpRequest) {
    // code for modern browsers
    xmlhttp = new XMLHttpRequest();
 } else {
    // code for old IE browsers
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
Spróbuj sam "

Stare wersje Internet Explorer (IE5 and IE6) nie obsługują obiekt DOMParser.

Aby obsłużyć IE5 i IE6, należy sprawdzić, czy przeglądarka obsługuje obiekt DOMParser, albo utworzyć ActiveXObject:

Przykład

if (window.DOMParser) {
  // code for modern browsers
  parser = new DOMParser();
  xmlDoc = parser.parseFromString(text,"text/xml");
} else {
  // code for old IE browsers
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async = false;
  xmlDoc.loadXML(text);
Spróbuj sam "

Przykłady

Więcej przykładów

Pobieranie informacji nagłówka z getAllResponseHeaders()
Pobieranie informacji nagłówka zasobu (file) .

Pobieranie szczegółowych informacji nagłówka z getResponseHeader()
Pobieranie szczegółowych informacji nagłówka zasobu (file) .

Pobieranie zawartości pliku ASP
Jak strona internetowa może komunikować się z serwerem WWW, podczas gdy typ użytkownika znaków w polu wprowadzania.

Pobieranie treści z bazy danych
Jak strona internetowa może pobierać informacje z bazy danych z obiektu XMLHttpRequest.

Pobieranie zawartości pliku XML
Załóż XMLHttpRequest do pobierania danych z pliku XML i wyświetlać dane w tabeli HTML.