AJAX so‘rovi


XMLHttpRequest obyekti server bilan ma’lumot almashish uchun ishlatiladi.


ULASHISH

Serverga so‘rov yuborish

Serverga so‘rov yuborish uchun XMLHttpRequest obyektining open() va send() metodlaridan foydalanamiz:

xhttp.open("GET", "ajax_info.txt", true); xhttp.send();
Metod Tavsif
open(method, url, async) So‘rov turini belgilaydi

method: so‘rov turi: GET yoki POST
url: server (fayl) joylashuvi
async: true (asinxron) yoki false (sinxron)
send() So‘rovni serverga yuboradi (GET uchun ishlatiladi)
send(string) So‘rovni serverga yuboradi (POST uchun ishlatiladi)

GET yoki POST?

GET POST’dan soddaroq va tezroq bo‘lib, ko‘p hollarda ishlatilishi mumkin.

Biroq quyidagi hollarda doimo POST so‘rovlaridan foydalaning:

  • Keshlangan fayldan foydalanib bo‘lmaganda (serverdagi fayl yoki ma’lumotlar bazasini yangilash).
  • Serverga katta hajmdagi ma’lumot yuborilganda (POST’da hajm cheklovlari yo‘q).
  • Foydalanuvchi kiritgan ma’lumotlar (noma’lum belgilarni o‘z ichiga olishi mumkin) yuborilganda POST GET’dan ishonchliroq va xavfsizroq.

GET so‘rovlari

Oddiy GET so‘rovi:

Misol

xhttp.open("GET", "demo_get.asp", true); xhttp.send();
O‘zingiz sinab ko‘ring »

Yuqoridagi misolda keshlangan natija olishingiz mumkin. Buning oldini olish uchun URL’ga noyob ID qo‘shing:

Misol

xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true); xhttp.send();
O‘zingiz sinab ko‘ring »

Agar GET metodi bilan ma’lumot yubormoqchi bo‘lsangiz, ma’lumotni URL’ga qo‘shing:

Misol

xhttp.open("GET", "demo_get2.asp?fname=Henry&lname=Ford", true); xhttp.send();
O‘zingiz sinab ko‘ring »


POST so‘rovlari

Oddiy POST so‘rovi:

Misol

xhttp.open("POST", "demo_post.asp", true); xhttp.send();
O‘zingiz sinab ko‘ring »

Ma’lumotlarni HTML forma kabi POST qilish uchun setRequestHeader() yordamida HTTP sarlavhasini qo‘shing. Yubormoqchi bo‘lgan ma’lumotlarni send() metodida ko‘rsating:

Misol

xhttp.open("POST", "demo_post2.asp", true); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send("fname=Henry&lname=Ford");
O‘zingiz sinab ko‘ring »
Metod Tavsif
setRequestHeader(header, value) So‘rovga HTTP sarlavhalarini qo‘shadi

header: sarlavha nomini belgilaydi
value: sarlavha qiymatini belgilaydi

url - serverdagi fayl

open() metodining url parametri serverdagi fayl manzilidir:

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

Fayl istalgan turdagi fayl bo‘lishi mumkin, masalan .txt va .xml yoki .asp va .php kabi server skript fayllari (ular javobni qaytarishdan oldin serverda amallar bajarishi mumkin).


Asinxron - true yoki false?

Server so‘rovlari asinxron tarzda yuborilishi kerak.

open() metodining async parametri true qilib o‘rnatilishi kerak:

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

Asinxron yuborishda JavaScript server javobini kutib turishi shart emas, buning o‘rniga u:

  • server javobini kutish vaqtida boshqa skriptlarni bajarishi
  • javob tayyor bo‘lgandan keyin u bilan ishlashi mumkin

onreadystatechange xususiyati

XMLHttpRequest obyekti yordamida so‘rovga javob kelganda bajariladigan funksiyani belgilashingiz mumkin.

Funksiya XMLHttpRequest obyektining onreadystatechange xususiyatida belgilanadi:

Misol

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();
O‘zingiz sinab ko‘ring »

Yuqoridagi misolda ishlatilgan "ajax_info.txt" fayli oddiy matnli fayl bo‘lib, quyidagicha ko‘rinadi:

<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>

onreadystatechange haqida keyingi boblardan birida batafsilroq o‘rganasiz.


Sinxron so‘rov

Sinxron so‘rovni bajarish uchun open() metodidagi uchinchi parametrni false ga o‘zgartiring:

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

Ba’zan async = false tezkor sinov uchun ishlatiladi. Sinxron so‘rovlarni eski JavaScript kodlarida ham uchratasiz.

Kod server ishini tugatishini kutib turgani sababli, onreadystatechange funksiyasiga ehtiyoj yo‘q:

Misol

xhttp.open("GET", "ajax_info.txt", false); xhttp.send(); document.getElementById("demo").innerHTML = xhttp.responseText;
O‘zingiz sinab ko‘ring »

Sinxron XMLHttpRequest (async = false) tavsiya etilmaydi, chunki server javobi tayyor bo‘lguncha JavaScript bajarilishi to‘xtab qoladi. Agar server band yoki sekin bo‘lsa, ilova qotib qoladi yoki to‘xtaydi.

Sinxron XMLHttpRequest veb-standartdan olib tashlanish jarayonida, ammo bu jarayon ko‘p yillar davom etishi mumkin.

Zamonaviy dasturchi vositalariga sinxron so‘rovlardan foydalanish haqida ogohlantirish tavsiya etiladi va bunday holatda ular InvalidAccessError istisnosini (exception) chiqarishi mumkin.


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!