Obiekt XMLHttpRequest

Obiekt XMLHttpRequest zapewnia metody komunikacji z serwerem po załadowaniu strony.

Co to jest obiekt XMLHttpRequest?

Obiekt XMLHttpRequest jestMarzenie dewelopera, ponieważ możesz:

  • Aktualizacja strony bez ponownego ładowania strony
  • Żądanie danych z serwera po załadowaniu strony
  • Pobieranie danych z serwera po załadowaniu strony
  • Wysyłanie danych do serwera w tle

Wszystkie nowoczesne przeglądarki wspierają obiekt XMLHttpRequest.

Przykład:Komunikacja XML HTTP z serwerem podczas wpisywania tekstu.

Tworzenie obiektu XMLHttpRequest

Możemy utworzyć obiekt XMLHttpRequest za pomocą jednego prostego wiersza kodu JavaScript.

W wszystkich nowoczesnych przeglądarkach (w tym IE 7):

xmlhttp=new XMLHttpRequest()

W Internet Explorer 5 i 6:

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")

Przykład

<script type="text/javascript">
var xmlhttp;
function loadXMLDoc(url)
{
xmlhttp=null;
if (window.XMLHttpRequest)
  { kod dla wszystkich nowych przeglądarek}
  xmlhttp=new XMLHttpRequest();
  }
else if (window.ActiveXObject)
  { kod dla IE5 i IE6}
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
if (xmlhttp!=null)
  {
  xmlhttp.onreadystatechange=state_Change;
  xmlhttp.open("GET",url,true);
  xmlhttp.send(null);
  }
else
  {
  alert("Twoja przeglądarka nie obsługuje XMLHTTP.");
  }
}
function state_Change()
{
if (xmlhttp.readyState==4)
  { 4 = "załadowany"}
  if (xmlhttp.status==200)
    { 200 = OK}
    // ...nasz kod tutaj...
    }
  else
    {
    alert("Problem z pobraniem danych XML");
    }
  }
}
</script>

TIY

Komentarz:onreadystatechange jest handlerem wydarzenia. Jego wartość (state_Change) to nazwa funkcji, która jest wywoływana, gdy stan obiektu XMLHttpRequest zmienia się. Stan zmienia się od 0 (niezainicjowany) do 4 (kompletny). Kod jest wykonywany tylko w stanie 4.

Dlaczego używać Async=true ?

Nasze przykłady używają "true" jako trzeciego parametru w metodzie open().

Ten parametr określa, czy żądanie jest przetwarzane asynchronicznie.

True oznacza, że skrypt będzie kontynuował wykonywanie po metodzie send(), bez czekania na odpowiedź z serwera.

Zdarzenie onreadystatechange upraszcza kod. Ale to jest najbezpieczniejszy sposób, aby zapobiec zatrzymaniu się kodu bez odpowiedzi serwera.

Ustawiając ten parametr na "false", można zrezygnować z dodatkowego kodu onreadystatechange. Jeśli nie ma znaczenia, czy reszta kodu będzie wykonywana w przypadku niepowodzenia żądania, można użyć tego parametru.

TIY

Więcej przykładów

Wgraj plik textfile do elementu div za pomocą XML HTTP

Wykonaj żądanie HEAD za pomocą XML HTTP

Wykonaj określone żądanie HEAD za pomocą XML HTTP

Wyświetl dane z pliku XML za pomocą XML HTTP

XML / ASP

Możesz również otworzyć dokument XML i wysłać go na stronę ASP na serwerze, przeanalizować ten żądanie i zwrócić wynik.

<html>
<body>
<script type="text/javascript">
xmlHttp=null;
if (window.XMLHttpRequest)
  // kod dla IE7, Firefox, Opera, itp.
  xmlHttp=new XMLHttpRequest();
  }
else if (window.ActiveXObject)
  // kod dla IE6, IE5
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
if (xmlHttp!=null)
  {
  xmlHttp.open("GET", "note.xml", false);
  xmlHttp.send(null);
  xmlDoc=xmlHttp.responseText;
  xmlHttp.open("POST", "demo_dom_http.asp", false);
  xmlHttp.send(xmlDoc);
  document.write(xmlHttp.responseText);
  }
else
  {
  alert("Twoja przeglądarka nie obsługuje XMLHTTP.");
  }
</script>
</body>
</html>

Strona ASP napisana w VBScript:

<%
ustaw xmldoc = Server.CreateObject("Microsoft.XMLDOM")
xmldoc.async=false
xmldoc.load(request)
dla każdego x w xmldoc.documentElement.childNodes
   jeśli x.NodeName = "to" to name=x.text
next
response.write(name)
%>

Przez użycie właściwości response.write przekazuj wyniki z powrotem do klienta.

TIY

Czy obiekt XMLHttpRequest jest standardem W3C?

Żadna z rekomendowanych standardów W3C nie określa obiektu XMLHttpRequest.

Jednak specyfikacja "Load and Save" poziomu 3 W3C DOM zawiera niektóre podobne funkcje, ale jeszcze żadna przeglądarka ich nie zaimplementowała.

Zobacz

Podręcznik XML DOM: Obiekt XMLHttpRequest