AJAX - Obiekt XMLHttpRequest

Obiekt XMLHttpRequest jest fundamentem AJAX.

  1. Tworzenie obiektu XMLHttpRequest
  2. Zdefiniowanie funkcji zwrotnej
  3. Otwieranie obiektu XMLHttpRequest
  4. Wysyłanie żądań do serwera

Obiekt XMLHttpRequest

Wszystkie współczesne przeglądarki obsługują Obiekt XMLHttpRequest.

Obiekt XMLHttpRequest można używać do wymiany danych z serwerem w tle. Oznacza to, że można aktualizować część zawartości strony bez konieczności ponownego ładowania całej strony.

Tworzenie obiektu XMLHttpRequest

Wszystkie współczesne przeglądarki (Chrome, Firefox, IE, Edge, Safari, Opera) mają wbudowane Obiekt XMLHttpRequest.

Gramatyka tworzenia obiektu XMLHttpRequest:

variable = new XMLHttpRequest();

Zdefiniowanie funkcji zwrotnej

Funkcja zwrotna to funkcja przekazywana jako parametr do innej funkcji.

W tym przypadku funkcja zwrotna powinna zawierać kod do wykonania, gdy odpowiedź jest gotowa.

xhttp.onload = function() {
  // Co zrobić, gdy odpowiedź jest gotowa
}

Wysyłanie żądania

Aby wysłać żądanie do serwera, możesz użyć obiektu XMLHttpRequest open() i send() Metoda:

xhttp.open("GET", "ajax_info.txt");
xhttp.send();

Przykład

// Tworzenie obiektu XMLHttpRequest
const xhttp = new XMLHttpRequest();
// Zdefiniowanie funkcji zwrotnej
xhttp.onload = function() {
  // Możesz tutaj użyć danych
}
// Wysyłanie żądania
xhttp.open("GET", "ajax_info.txt");
xhttp.send();

Spróbuj sam

Dostęp między domenami (Access Across Domains)

Z powodów bezpieczeństwa, współczesne przeglądarki nie pozwalają na dostęp między domenami.

Oznacza to, że strona i plik XML, który próbuje go załadować, muszą być umieszczone na tym samym serwerze.

Przykłady na CodeW3C.com otwierają pliki XML znajdujące się w domenie CodeW3C.com.

Jeśli chcesz użyć powyższego przykładu na swojej stronie, plik XML, który ładujesz, musi być umieszczony na swoim serwerze.

Metody obiektu XMLHttpRequest

Metoda Opis
new XMLHttpRequest() Tworzenie nowego obiektu XMLHttpRequest.
abort() Anulowanie bieżącego żądania.
getAllResponseHeaders() Zwracanie informacji nagłówkowych.
getResponseHeader() Zwracanie specyficznych informacji nagłówkowych.
open(method, url, async, user, psw)

Określenie żądania.

  • method:typ żądania GET lub POST
  • url:lokalizacja pliku
  • async:true (asynchroniczne) lub false (synchroniczne)
  • user:opcjonalna nazwa użytkownika
  • psw:opcjonalne hasło
send() Wysyłanie żądania do serwera, używane dla żądań GET.
send(string) Wysyłanie żądania do serwera, używane dla żądań POST.
setRequestHeader() Dodanie pary etykieta/wartość do nagłówków do wysłania.

Atrybuty obiektu XMLHttpRequest

Właściwości Opis
onload Zdefiniowanie funkcji wywoływanej przy otrzymaniu (ładowaniu) żądania.
onreadystatechange Zdefiniowanie funkcji wywoływanej, gdy zmienia się atrybut readyState.
readyState

Zapisuje stan XMLHttpRequest

  • 0: Żądanie nie zainicjowane
  • 1: Połączono z serwerem
  • 2: Żądanie zostało otrzymane
  • 3: Trwa przetwarzanie żądania
  • 4: Żądanie zostało zakończone i odpowiedź jest gotowa
responseText Zwraca dane odpowiedzi w formie ciągului znaków
responseXML Zwraca dane odpowiedzi w formacie XML
status

Zwraca numer stanu żądania

  • 200: "OK"
  • 403: "Zabronione"
  • 404: "Nie znaleziono"

Aby uzyskać pełną listę, odwiedź Podręcznik odnośnie wiadomości HTTP

statusText Zwraca tekst stanu (np. "OK" lub "Nie znaleziono")

Właściwości onload

Podczas korzystania z XMLHttpRequest można zdefiniować funkcję zwrotną, aby wykonać ją po otrzymaniu odpowiedzi na żądanie

Proszę zdefiniować funkcję w obiekcie XMLHttpRequest onload Funkcję zdefiniowaną w właściwości

Przykład

xhttp.onload = function() {
  document.getElementById("demo").innerHTML = this.responseText;
}
xhttp.open("GET", "ajax_info.txt");
xhttp.send();

Spróbuj sam

Wiele funkcji zwrotnych

Jeśli na stronie są多个 AJAX zadania, powinno się utworzyć funkcję do wykonywania obiektu XMLHttpRequest i dla każdego zadania AJAX utworzyć funkcję zwrotną

Wywołanie funkcji powinno zawierać URL oraz funkcję wywoływana gdy odpowiedź jest gotowa

Przykład

loadDoc("url-1", myFunction1);
loadDoc("url-2", myFunction2);
function loadDoc(url, cFunction) {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {cFunction(this);}
  xhttp.open("GET", url);
  xhttp.send();
}
function myFunction1(xhttp) {
  // Oto akcja
}
function myFunction2(xhttp) {
  // Oto akcja
}

Właściwości onload

readyState Właściwości zapisują stan XMLHttpRequest

onreadystatechange Właściwości definiują funkcję zwrotną, która jest wykonywana gdy zmienia się wartość właściwości readyState

status Właściwości i statusText Właściwości zapisują stan obiektu XMLHttpRequest

Właściwości Opis
onreadystatechange Definiuje funkcję wywoływane gdy zmienia się wartość właściwości readyState
readyState

Zapisuje stan XMLHttpRequest

  • 0: Żądanie nie zainicjowane
  • 1: Połączono z serwerem
  • 2: Żądanie zostało otrzymane
  • 3: Trwa przetwarzanie żądania
  • 4: Żądanie zostało zakończone i odpowiedź jest gotowa
status

Zwraca numer stanu żądania

  • 200: "OK"
  • 403: "Zabronione"
  • 404: "Nie znaleziono"

Aby uzyskać pełną listę, odwiedź Podręcznik odnośnie wiadomości HTTP

statusText statusText

Zwróć stan tekstu (np. "OK" lub "Nie znaleziono").

Funkcja onreadystatechange jest wywoływana przy każdym zmianie readyState. 4 i status wynosi 200 Gdy odpowiedź jest gotowa:

Przykład

function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("demo").innerHTML =
      this.responseText;
    }
  };
  xhttp.open("GET", "ajax_info.txt");
  xhttp.send();
}

Spróbuj sam

Zdarzenie onreadystatechange zostało wywołane czterokrotnie (1-4), przy każdym zmianie readyState.