AJAX XMLHttpRequest


Tartalomjegyzék

    Tartalomjegyzék megjelenítése


Az XMLHttpRequest objektum adatok kérésére szolgál egy szervertől.


Kérés küldése szervernek

Ha kérést szeretnénk küldeni egy szervernek, akkor az XMLHttpRequest objektum open() és send() metódusait használjuk:

xhttp.open("GET", "ajax_info.txt", true);
 xhttp.send();
open(method, url, async)

Megadja a kérés típusát

módszer: a kérés típusa: GET vagy POST
url: a szerver (fájl) helye
aszinkron: igaz (aszinkron) vagy hamis (szinkron)

send()

Elküldi a kérést a szervernek (a GET-hez használatos)

send(string)

Elküldi a kérést a szervernek (a POST-hoz használatos)


Az url - egy fájl a szerveren

Az open() metódus url paramétere egy szerveren lévő fájl címe:

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

A fájl bármilyen típusú lehet, például .txt és .xml, vagy szerver szkriptfájlok, például .asp és .php (amely képes végrehajtani műveletek a szerveren a válasz visszaküldése előtt).


Aszinkron - igaz vagy hamis?

A szerverkéréseket aszinkron módon kell elküldeni.

Az open() aszinkron paramétere a metódust igazra kell állítani:

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

Aszinkron küldéssel a A JavaScript-nek nem kell várnia a szerver válaszára, de ehelyett:

  • futtasson más szkripteket, miközben a szerver válaszára vár

  • kezelje a választ, miután a válasz elkészült

Az async paraméter alapértelmezett értéke async=true.

A harmadik paramétert nyugodtan eltávolíthatja a kódból.

A szinkron XMLHttpRequest (async=false) nem ajánlott, mert a JavaScript leállítja a végrehajtást, amíg a kiszolgáló válasza készen nem áll. Ha a szerver foglalt vagy lassú, a az alkalmazás lefagy vagy leáll.


GET kérés vagy POST kérés?

A GET egyszerűbb és gyorsabb, mint a POST, és a legtöbb esetben használható.

Azonban mindig használjon POST kéréseket, ha:

  • A gyorsítótárazott fájl nem választható (fájl vagy adatbázis frissítése a kiszolgálón).

  • Nagy mennyiségű adat küldése a szerverre (a POST-nak nincs méretkorlátozása).

  • A felhasználói bevitel küldése (amely ismeretlen karaktereket is tartalmazhat), a POST robusztusabb és biztonságosabb, mint a GET.


GET kérések

Egy egyszerű GET kérés:

Példa

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

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h2>The XMLHttpRequest Object</h2>
<button type="button" onclick="loadDoc()">Request data</button>
<p id="demo"></p>

<script>
function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
  }
  xhttp.open("GET", "demo_get.asp");
  xhttp.send();
}
</script>

</body>
</html>

A fenti példában gyorsítótárazott eredményt kaphat. Ennek elkerülése érdekében adjon hozzá egyedi azonosítót az URL-hez:

Példa

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

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h2>The XMLHttpRequest Object</h2>
<button type="button" onclick="loadDoc()">Request data</button>

<p id="demo"></p>

<script>
function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
  }
  xhttp.open("GET", "demo_get.asp?t=" + Math.random());
  xhttp.send();
}
</script>

</body>
</html>

Ha a GET metódussal szeretne információkat küldeni, adja hozzá az információt az URL-hez:

Példa

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

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h2>The XMLHttpRequest Object</h2>
<button type="button" onclick="loadDoc()">Request data</button>

<p id="demo"></p>

<script>
function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
  }
  xhttp.open("GET", "demo_get2.asp?fname=Henry&lname=Ford");
  xhttp.send();
}
</script>
 
</body>
</html>

Hogy a szerver hogyan használja a bemenetet, és hogyan válaszol a kérésre, azt egy későbbi fejezet ismerteti.



POST kérések

Egy egyszerű POST kérés:

Példa

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

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h2>The XMLHttpRequest Object</h2>
<button type="button" onclick="loadDoc()">Request data</button>

<p id="demo"></p>
 
<script>
function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
  }
  xhttp.open("POST", "demo_post.asp");
  xhttp.send();
}
</script>

</body>
</html>

Az adatok, például egy HTML-űrlap POST-hoz adjon hozzá egy HTTP-fejlécet a setRequestHeader()-val. Adja meg a küldeni kívánt adatokat a send() metódussal:

Példa

xhttp.open("POST", "ajax_test.asp");
 xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 xhttp.send("fname=Henry&lname=Ford");

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h2>The XMLHttpRequest Object</h2>
<button type="button" onclick="loadDoc()">Request data</button>

<p id="demo"></p>
 
<script>
function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML = this.responseText;
  }
  xhttp.open("POST", "demo_post2.asp");
  xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhttp.send("fname=Henry&lname=Ford");
}
</script>

</body>
</html>
setRequestHeader(header, value)

HTTP-fejléceket ad hozzá a kéréshez

fejléc: megadja a fejléc nevét
érték: a fejléc értékét adja meg


Szinkron kérés

Szinkron kérés végrehajtásához módosítsa az open() metódus harmadik paraméterét false-ra:

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

Néha az async=false értéket használják gyors teszteléshez. Azt is meg fogja találni szinkron kérések régebbi JavaScript-kódban.

Mivel a kód megvárja a szerver befejezését, nincs szükség readystatechange funkció:

Példa

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

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h2>The XMLHttpRequest Object</h2>

<p id="demo">Let AJAX change this text.</p>

<button type="button" onclick="loadDoc()">Change Content</button>

<script>
function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.open("GET", "ajax_info.txt", false);
  xhttp.send();
  document.getElementById("demo").innerHTML = xhttp.responseText;
}
</script>

</body>
</html>

A szinkron XMLHttpRequest (async=false) nem ajánlott, mert a JavaScript leállítja a végrehajtást, amíg a kiszolgáló válasza készen nem áll. Ha a szerver foglalt vagy lassú, a az alkalmazás lefagy vagy leáll.

A modern fejlesztői eszközök használata figyelmeztetést javasol szinkron kéréseket, és előfordulásakor InvalidAccessError kivételt adhat.