AJAX - XMLHttpRequest
- Önceki Sayfa AJAX XMLHttp
- Sonraki Sayfa AJAX Yanıt
XMLHttpRequest nesnesi, sunucu ile veri alışverişinde kullanılır.
Sunucuya istek gönderin
Sunucuya istek göndermek için, XMLHttpRequest nesnesinin open()
ve send()
Yöntem:
xhttp.open("GET", "ajax_info.txt", true); xhttp.send();
Yöntem | Açıklama |
---|---|
open(method, url, async) |
İstek türünü belirler
|
send() | Sunucuya istek gönderin (GET için kullanılır) |
send(string) | Sunucuya istek gönderin (POST için kullanılır) |
GET mi POST mu?
GET, POST'e göre daha basit ve hızlıdır, çoğu durumda kullanılabilir.
Ancak, aşağıdaki durumlarda her zaman POST kullanın:
- Önbellek dosyası seçenek değildir (sunucudaki dosya veya veritabanını güncelleme)
- Sunucuya büyük miktarda veri gönderin (POST, boyut sınırlaması yok)
- Kullanıcı girdisini gönderirken (bilinmeyen karakterler içerebilir), POST GET'e göre daha güçlü ve güvenlidir
GET istemi
Basit bir GET istemi:
Örnek
xhttp.open("GET", "demo_get.asp", true); xhttp.send();
Yukarıdaki örnekte, bir önbellek sonucu elde edebilirsiniz. Bu durumu önlemek için, URL'ye benzersiz bir ID ekleyin:
Örnek
xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true); xhttp.send();
GET yöntemi ile bilgi göndermek istiyorsanız, bu bilgileri URL'ye ekleyin:
Örnek
xhttp.open("GET", "demo_get2.asp?fname=Bill&lname=Gates", true); xhttp.send();
POST istemi
Basit bir POST istemi:
Örnek
xhttp.open("POST", "demo_post.asp", true); xhttp.send();
HTML formu gibi POST verileri göndermek istiyorsanız, aşağıdaki şekilde setRequestHeader()
Bir HTTP başlığı ekleyin. Aşağıda belirtilen send()
方法中 belirtilen verileri göndermeniz gerekiyor:
Örnek
xhttp.open("POST", "ajax_test.asp", true); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send("fname=Bill&lname=Gates");
Yöntem | Açıklama |
---|---|
setRequestHeader(header, value) |
İsteklere HTTP başlığı ekler
|
url - Sunucudaki dosya
open() yönteminin url parametre, sunucudaki dosyanın adresidir:
xhttp.open("GET", "ajax_test.asp", true);
Bu dosya herhangi bir tür olabilir, .txt ve .xml gibi veya sunucu betik dosyaları, .asp ve .php (onlar sunucuda cevap göndermeden önce işlem görebilirler).
Asenkron - true veya false?
Eşzamanlı olarak göndermek içinopen()
tarzı async parametreler true
:
xhttp.open("GET", "ajax_test.asp", true);
Asenkron olarak gönderme, web geliştiriciler için büyük bir ilerlemedir. Sunucuda被执行的许多任务都非常耗时。AJAX öncesi, bu işlem uygulamayı askıya alabilir veya durdurabilir.
Asenkron olarak gönderilmesiyle, JavaScript sunucu cevabını beklemek zorunda kalmaz, aksine:
- Sunucu cevabı beklerken diğer betikleri çalıştırır
- Cevap hazır olduğunda işlem yapar
onreadystatechange özelliği
XMLHttpRequest nesnesi aracılığıyla, istek alındığında hangi fonksiyonun çalışacağını tanımlayabilirsiniz.
Bu fonksiyon, XMLHttpResponse nesnesinin onreadystatechange
Özellikte tanımlanan:
Örnek
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();
onreadystatechange hakkında daha fazla bilgiyi sonraki bölümlerde öğreneceksiniz.
Eşzamanlı İstek
Eşzamanlı istekleri gerçekleştirmek için lütfen open()
Metodun üçüncü parametresi olarak ayarlanır false
:
xhttp.open("GET", "ajax_info.txt", false);
Bazen async = false hızlı testler için kullanılır. Eşzamanlı istekleri daha eski JavaScript kodlarında da görebilirsiniz.
Kodun sunucunun tamamlanmasını beklediği için onreadystatechange fonksiyonu gerekmez:
Örnek
xhttp.open("GET", "ajax_info.txt", false); xhttp.send(); document.getElementById("demo").innerHTML = xhttp.responseText;
Eşzamanlı XMLHttpRequest (async = false) önerilmez, çünkü JavaScript sunucu yanıtını beklemeden çalışmayı durdurur. Sunucu yoğun veya yavaşsa, uygulama askıya alınabilir veya durabilir.
Eşzamanlı XMLHttpRequest Web Standartları'ndan kaldırılmakta, ancak bu süreç yıllar sürebilir.
Eşzamanlı istek kullanımı uyarılır ve bu durumda InvalidAccessError hatası fırlatabilir.
- Önceki Sayfa AJAX XMLHttp
- Sonraki Sayfa AJAX Yanıt