Loading AI tools
Z Wikipedii, wolnej encyklopedii
XMLHttpRequest, XHR – obiekt języków skryptowych (np. JavaScript, JScript lub VBScript) przeglądarek internetowych umożliwiający przesyłanie żądań do serwera WWW za pomocą protokołu HTTP.
Cechą charakterystyczną XMLHttpRequest jest możliwość wykonywania żądań już po załadowaniu się strony internetowej w trakcie interakcji z użytkownikiem. Otrzymane odpowiedzi serwera są wówczas wykorzystywane do modyfikacji załadowanego dokumentu. Możliwość asynchronicznego wykonywania żądań sprawia, że są one wykonywane w tle i nie przerywają interakcji użytkownika ze stroną, dynamicznie ją zmieniając. Treść odpowiedzi serwera najczęściej przekazywana jest w formatach XML, JSON lub czystym tekstem.
XMLHttpRequest stał się podstawą techniki projektowania stron AJAX. Przykłady aplikacji opartych na XHR to Google Gmail, Google Maps i Google Suggest oraz Windows Live Local.
Metoda | Opis |
---|---|
abort() |
Anuluje aktualne żądanie. |
getAllResponseHeaders() |
Zwraca kompletny zestaw nagłówków HTTP jako łańcuch znaków. |
getResponseHeader( headerName ) |
Zwraca wartość konkretnego nagłówka HTTP. |
open( metoda, URL ) open( metoda, URL, async ) open( metoda, URL, async, userName ) open( metoda, URL, async, userName, password ) |
Określa metodę, URL i inne opcjonalne argumenty żądania.
Argument metoda może mieć wartość „GET”, „POST”, „HEAD”, „PUT”, „DELETE” lub inne metody HTTP wypisane w specyfikacji W3C.[1] Argument URL może być zarówno relatywnym, jak i bezwzględnym adresem. Argument „async” określa, czy żądanie powinno być przetwarzane asynchronicznie lub nie – dla 1 („true”) skrypt będzie dalej przetwarzany po wykonaniu metody send(), a dla 0 („false”) skrypt będzie przetwarzany dopiero po otrzymaniu odpowiedzi. |
send( zawartość ) |
Wysyła żądanie. |
setRequestHeader( nazwaNagłówka, zawartośćNagłówka ) |
Dodaje parę nagłówek/zawartość do żądań HTTP. |
Własność | Opis |
---|---|
onreadystatechange |
Określa referencje do funkcji wykonywanej przy każdej zmianie własności readyState. |
readyState |
Zawiera stan obiektu jak następuje:
|
responseText |
Zawiera odpowiedź (łańcuch znaków). |
responseXML |
Zawiera odpowiedź jako XML. Ta własność zwraca obiekt dokumentu XML, który może być parsowany, używając klas i interfejsów W3C DOM. |
status |
Zawiera kod odpowiedzi HTTP jako numer (np. 404 dla „Not Found” lub 200 dla „OK”). |
statusText |
Zawiera status jako ciąg znaków (np. „Not Found” lub „OK”). |
XMLHttpRequest było pierwotnie stworzone przez Microsoft jako część usługi OWA (Outlook Web Access) 2000, w postaci obiektu ActiveX o nazwie XMLHTTP. Jego implementacja jest dostępna w Internet Explorerze, poczynając od wersji 5.0[2], poprzez JScript, VBScript i inne języki skryptowe obsługiwane przez IE.
Pierwsza natywna implementacja XMLHttpRequest została włączona przez Mozillę do Mozilla Application Suite 1.0 w 2002 roku. Ta implementacja była potem obsługiwana przez Apple w Safari 1.2, Konqueror, Opera Software od Opery 8.0 i iCab od wersji 3.0b352. Również sam Microsoft w przeglądarce Internet Explorer 7 dodał natywną obsługę.
Konsorcjum World Wide Web opublikowała szkic (Working Draft) specyfikacji obiektu XMLHttpRequest 5 kwietnia 2006 roku. Prace nad nią ciągle trwają, jej celem jest udokumentowanie minimalnego zestawu wspólnych cech istniejących implementacji, co ułatwi tworzenie kodu bez oddzielnych bloków tekstu dla różnych platform. Szkicowa specyfikacja bazuje na implementacjach popularnych przeglądarek dla zapewnienia przenośności kodu.
Strony wykorzystujące XMLHttpRequest lub XMLHTTP wykorzystują obiekt XMLHttpRequest bezpośrednio w JavaScripcie lub z poziomu gotowych bibliotek konstrukcyjnych (frameworków).
Istnieją również inne metody, które dają te same efekty:
IE implementuje pamięć podręczna dla zapytań typu GET. Autorzy, którzy nie znają zachowań IE, oczekują, że zapytania GET będą odświeżane za każdym razem tak samo jak po odświeżeniu strony. W niektórych sytuacjach może to spowodować błędy na stronie. Najprostszym rozwiązaniem jest stosowanie zapytań typu POST.
Możemy również ustawić nagłówek „Expires” na datę w przeszłości, dzięki czemu unikniemy zapisania strony w pamięci podręcznej. Przykład zastosowania w PHP:
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); // sprawia, że IE nie zapisze tej strony
header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );
header( "Cache-Control: no-cache, must-revalidate" );
header( "Pragma: no-cache" );
header( "Expires: -1", false );
To samo można osiągnąć, używając Java Servlet:
response.setHeader( "Pragma", "no-cache" );
response.addHeader( "Cache-Control", "must-revalidate" );
response.addHeader( "Cache-Control", "no-cache" );
response.addHeader( "Cache-Control", "no-store" );
response.setDateHeader("Expires", 0);
Alternatywnie można również określić w obiekcie XMLHttpRequest, aby pobierał zawartość pomimo zapisanej wersji w pamięci podręcznej, tak jak pokazano w poniższym przykładzie:
req.open( "GET", "xmlprovider.php" );
req.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
req.send( null );
Kolejnym rozwiązaniem jest używanie losowego ciągu znaków na końcu zapytania:
req.open( "GET", "xmlprovider.php?sid=" + Math.random());
Zapewni to pobranie aktualnej zawartości.
Należy pamiętać, że te techniki powinny być wykorzystywane tylko, jeżeli występują problemy. Zamiast wysyłać niepoprawne nagłówki lepiej jest informować użytkownika, że nowe dane mogą być aktualnie dostępne.
Powstało wiele bibliotek szkieletowych, które obsługują wszystkie implementacje XMLHttpRequest. Patrz też: AJAX.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.