Základním kamenem AJAX je objekt XMLHttpRequest.
Vytvořte objekt XMLHttpRequest
Definujte funkci zpětného volání
Otevřete objekt XMLHttpRequest
Odeslat požadavek na server
Všechny moderní prohlížeče podporují objekt XMLHttpRequest
.
Objekt XMLHttpRequest
lze použít k výměně dat s webovým serverem za scény. To znamená, že je možné aktualizovat části webové stránky bez znovu načtení celé stránky.
Všechny moderní prohlížeče (Chrome, Firefox, IE, Edge, Safari, Opera) mají vestavěný objekt XMLHttpRequest
.
Syntaxe pro vytvoření objektu XMLHttpRequest
:
variable = new XMLHttpRequest();
Funkce zpětného volání je funkce předaná jako parametr jiné funkci.
V tomto případě by funkce zpětného volání měla obsahovat kód, který se má spustit, když je odpověď je připravena.
xhttp.onload = function() {
// What to do when the response is ready
}
Chcete-li odeslat požadavek na server, můžete použít metody open() a send(). Objekt XMLHttpRequest
:
xhttp.open("GET", "ajax_info.txt");
xhttp.send();
// Create an XMLHttpRequest object
const xhttp = new XMLHttpRequest();
// Define a callback function
xhttp.onload = function() {
// Here you can use the Data
}
// Send a request
xhttp.open("GET", "ajax_info.txt");
xhttp.send();
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>The XMLHttpRequest Object</h2>
<div id="demo">
<p>Let AJAX change this text.</p>
<button type="button" onclick="loadDoc()">Change Content</button>
</div>
<script>
function loadDoc() {
const xhttp = new XMLHttpRequest();
xhttp.onload = function() {
document.getElementById("demo").innerHTML = this.responseText;
}
xhttp.open("GET", "ajax_info.txt");
xhttp.send();
}
</script>
</body>
</html>
Moderní prohlížeče z bezpečnostních důvodů neumožňují přístup napříč doménami.
To znamená, že webová stránka i soubor XML, který se pokouší načíst, musí být umístěny na stejném serveru.
Příklady na W3Schools všechny otevřené soubory XML umístěné v doméně W3Schools.
Pokud chcete výše uvedený příklad použít na jedné ze svých webových stránek, soubory XML, které načtete, musí být umístěny na vašem vlastním serveru.
Vytvoří nový objekt XMLHttpRequest
Zruší aktuální požadavek
Vrátí informace v záhlaví
Vrátí konkrétní informace záhlaví
Určuje
metodu požadavku: typ požadavku GET nebo POST
url: umístění souboru
asynchronní: true (asynchronní) nebo false (synchronní)
user: volitelné uživatelské jméno
psw: volitelné heslo
Odešle požadavek na server
Používá se pro požadavky GET
Odešle požadavek na server.
Používá se pro požadavky POST
Přidá do hlavičky k odeslání dvojici štítek/hodnota
Definuje funkci, která se má zavolat, když je požadavek přijat (načten)
Definuje funkci, která se má volat, když se změní vlastnost readyState
Uchovává stav XMLHttpRequest.
0: požadavek není inicializován
1: Navázáno připojení k serveru
2: žádost přijata
3: zpracování požadavku
4: požadavek dokončen a odpověď je připravena
Vrátí data odpovědi jako řetězec
Vrátí data odpovědi jako data XML
Vrátí stavové číslo požadavku
200: "OK"
403: "Zakázáno"
404: "Nenalezeno"
Úplný seznam najdete na Http Odkaz na zprávy
Vrátí text stavu (např. „OK“ nebo „Nenalezeno“)
Pomocí objektu XMLHttpRequest
můžete definovat funkci zpětného volání, která se má spustit, když žádost obdrží odpověď.
Funkce je definována ve vlastnosti onload
objektu XMLHttpRequest
:
xhttp.onload = function() {
document.getElementById("demo").innerHTML = this.responseText;
}
xhttp.open("GET", "ajax_info.txt");
xhttp.send();
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<div id="demo">
<h2>The XMLHttpRequest Object</h2>
<button type="button" onclick="loadDoc()">Change Content</button>
</div>
<script>
function loadDoc() {
const xhttp = new XMLHttpRequest();
xhttp.onload = function() {
document.getElementById("demo").innerHTML =
this.responseText;
}
xhttp.open("GET", "ajax_info.txt");
xhttp.send();
}
</script>
</body>
</html>
Pokud máte na webu více než jednu úlohu AJAX, měli byste pro ni vytvořit jednu funkci spuštění objektu XMLHttpRequest
a jednu funkci zpětného volání pro každý Úloha AJAX.
Volání funkce by mělo obsahovat URL a jakou funkci volat, když je odpověď je připravena.
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) {
// action goes here
}
function myFunction2(xhttp) {
// action goes here
}
Vlastnost readyState
uchovává stav XMLHttpRequest.
Vlastnost onreadystatechange
definuje funkci zpětného volání, která se má provést, když se readyState změní.
Vlastnosti status
a statusText
obsahují stav objektu XMLHttpRequest.
Definuje funkci, která se má volat, když se změní vlastnost readyState
Uchovává stav XMLHttpRequest.
0: požadavek není inicializován
1: Navázáno připojení k serveru
2: žádost přijata
3: zpracování požadavku
4: požadavek dokončen a odpověď je připravena
200: "OK"
403: "Zakázáno"
404: "Stránka nenalezena"
Úplný seznam najdete na Odkaz na zprávy HTTP
Vrátí text stavu (např. „OK“ nebo „Nenalezeno“)
Funkce onreadystatechange
se volá pokaždé, když se readyState změní.
Když je readyState
4 a stav je 200, odpověď je připravena:
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();
}
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<div id="demo">
<h2>The XMLHttpRequest Object</h2>
<button type="button" onclick="loadDoc()">Change Content</button>
</div>
<script>
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();
}
</script>
</body>
</html>
Událost onreadystatechange
se spustí čtyřikrát (1-4), jednou pro každou změnu v readyState.