Výukový program XML

XML HOME Úvod do XML XML Jak používat XML strom Syntaxe XML Prvky XML Atributy XML Jmenné prostory XML Zobrazení XML XML HttpRequest XML Parser XML DOM XML XPath XML XSLT XML XQuery XML XLlink XML Validator XML DTD Schéma XML XML server Příklady XML XML kvíz XML certifikát

XML AJAX

Úvod do AJAX AJAX XMLHttp Požadavek AJAX Odpověď AJAX Soubor XML AJAX AJAX PHP AJAX ASP Databáze AJAX Aplikace AJAX Příklady AJAX

XML DOM

Úvod do DOM DOM uzly Přístup k DOM Informace o uzlu DOM Seznam uzlů DOM DOM Traversing Navigace DOM DOM získat hodnoty DOM změnit uzly DOM Remove Nodes DOM nahradit uzly DOM Vytvořte uzly DOM Přidat uzly Klonovací uzly DOM Příklady DOM

Výukový program XPath

Úvod do XPath Uzly XPath Syntaxe XPath osy XPath Operátoři XPath Příklady XPath

Kurz XSLT

Úvod do XSLT Jazyky XSL Transformace XSLT XSLT <šablona> XSLT <hodnota-of> XSLT <pro každého> XSLT <sort> XSLT <if> XSLT <vyberte> Použít XSLT XSLT u klienta XSLT na serveru XSLT Úprava XML Příklady XSLT

Výukový program XQuery

Úvod do XQuery Příklad XQuery XQuery FLWOR HTML XQuery Podmínky XQuery Syntaxe XQuery Přidat XQuery XQuery Select Funkce XQuery

XML DTD

Úvod do DTD Stavební bloky DTD DTD prvky Atributy DTD DTD Elements vs Attr DTD entity Příklady DTD

XSD schéma

Úvod do XSD XSD Jak na to XSD <schéma> XSD prvky XSD atributy Omezení XSD

XSD komplex

XSD prvky XSD Prázdné Pouze prvky XSD Pouze text XSD XSD smíšené XSD indikátory XSD <libovolné> XSD <jakýkoliAtribut> Náhrada XSD Příklad XSD

XSD data

XSD řetězec Datum XSD Číselné XSD XSD Různé XSD reference

Webové služby

Služby XML XML WSDL XML SOAP XML RDF XML RSS

Reference

Typy uzlů DOM Uzel DOM DOM NodeList DOM NamedNodeMap Dokument DOM Prvek DOM Atribut DOM Text DOM DOM CDATA Komentář DOM DOM XMLHttpRequest DOM Parser Prvky XSLT Funkce XSLT/XPath

AJAX – Odeslání požadavku na server


Objekt XMLHttpRequest se používá k výměně dat se serverem.


Odeslat požadavek na server

K odeslání požadavku na server používáme metody open() a send() objektu XMLHttpRequest:

xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
Method Description
open(method, url, async) Specifies the type of request

method: the type of request: GET or POST
url: the server (file) location
async: true (asynchronous) or false (synchronous)
send() Sends the request to the server (used for GET)
send(string) Sends the request to the server (used for POST)

GET nebo POST?

GET je jednodušší a rychlejší než POST a lze jej použít ve většině případů.

Požadavky POST však vždy používejte, když:

  • Soubor v mezipaměti není možnost (aktualizace souboru nebo databáze na serveru).
  • Odesílání velkého množství dat na server (POST nemá žádná omezení velikosti).
  • Odesílání uživatelského vstupu (který může obsahovat neznámé znaky), POST je robustnější a bezpečnější než GET.

GET požadavky

Jednoduchý požadavek GET:

Příklad

xhttp.open("GET", "demo_get.asp", true);
xhttp.send();

Ve výše uvedeném příkladu můžete získat výsledek uložený v mezipaměti. Chcete-li se tomu vyhnout, přidejte k adrese URL jedinečné ID:

Příklad

xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true);
xhttp.send();

Pokud chcete odeslat informace metodou GET, přidejte informace do adresy URL:

Příklad

xhttp.open("GET", "demo_get2.asp?fname=Henry&lname=Ford", true);
xhttp.send();


Požadavky POST

Jednoduchý požadavek POST:

Příklad

xhttp.open("POST", "demo_post.asp", true);
xhttp.send();

Chcete-li POST data jako formulář HTML, přidejte hlavičku HTTP pomocí setRequestHeader(). V metodě send() zadejte data, která chcete odeslat:

Příklad

xhttp.open("POST", "demo_post2.asp", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Henry&lname=Ford");
Method Description
setRequestHeader(header, value) Adds HTTP headers to the request

header: specifies the header name
value: specifies the header value

Adresa URL – Soubor na serveru

Parametr url metody open() je adresa souboru na serveru:

xhttp.open("GET", "ajax_test.asp", true);

Soubor může být libovolný soubor, například .txt a .xml, nebo serverové skriptovací soubory jako .asp a .php (které mohou provádět akce na serveru před odesláním odpovědi zpět).


Asynchronní – pravda nebo ne?

Požadavky serveru by měly být odesílány asynchronně.

Parametr async metody open() by měl být nastaven na hodnotu true:

xhttp.open("GET", "ajax_test.asp", true);

Při asynchronním odesílání nemusí JavaScript čekat na odpověď serveru, ale může:

  • spouštět další skripty při čekání na odpověď serveru
  • zabývat se odpovědí poté, co je odpověď připravena

Vlastnost onreadystatechange

Pomocí objektu XMLHttpRequest můžete definovat funkci, která se má provést, když požadavek obdrží odpověď.

Funkce je definována ve vlastnosti onreadystatechange objektu XMLHttpResponse:

Příklad

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

Soubor „ajax_info.txt“ použitý ve výše uvedeném příkladu je jednoduchý textový soubor a vypadá takto:

<h1>AJAX</h1>
<p>AJAX is not a programming language.</p>
<p>AJAX is a technique for accessing web servers from a web page.</p>
<p>AJAX stands for Asynchronous JavaScript And XML.</p>

Více o onreadystatechange se dozvíte v pozdější kapitole.


Synchronní požadavek

Chcete-li provést synchronní požadavek, změňte třetí parametr v metodě open() na hodnotu false:

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

Někdy se pro rychlé testování používá async = false. Synchronní požadavky najdete také ve starším kódu JavaScript.

Protože kód bude čekat na dokončení serveru, není potřeba funkce onreadystatechange:

Příklad

xhttp.open("GET", "ajax_info.txt", false);
xhttp.send();
document.getElementById("demo").innerHTML = xhttp.responseText;

Synchronní XMLHttpRequest (async = false) se nedoporučuje, protože JavaScript se zastaví, dokud nebude připravena odpověď serveru. Pokud je server zaneprázdněn nebo pomalý, aplikace přestane reagovat nebo se zastaví.

Synchronní XMLHttpRequest je v procesu odstraňování z webového standardu, ale tento proces může trvat mnoho let.

Moderní vývojářské nástroje se vyzývají, aby varovaly před používáním synchronních požadavků a mohou vyvolat výjimku InvalidAccessError, když nastane.