Özellikle, varsayılandan ( async: true) farkı nedir?
Hangi durumlarda ben açık kümesi isteyeyim asynciçin falseve ateş gelen sayfadaki diğer olayları önlemede bir ilgisi var mı?
Özellikle, varsayılandan ( async: true) farkı nedir?
Hangi durumlarda ben açık kümesi isteyeyim asynciçin falseve ateş gelen sayfadaki diğer olayları önlemede bir ilgisi var mı?
Yanıtlar:
Sayfadaki diğer etkinliklerin tetiklenmesini önlemekle bir ilgisi var mı?
Evet.
Zaman uyumsuzluğunu false olarak ayarlamak, çağırdığınız ifadenin işlevinizdeki bir sonraki ifadenin çağrılmasından önce tamamlanması gerektiği anlamına gelir. Async: true değerini ayarlarsanız, bu ifade yürütmeye başlar ve async ifadesinin henüz tamamlanıp tamamlanmadığına bakılmaksızın bir sonraki ifade çağrılır.
Daha fazla bilgi için bkz: jQuery ajax başarı anonim işlev kapsamı
async: false asenkroniteyi çağrıdan tamamen kaldırır . Çağrı ajax blokları - Sunucu yanıt verdi kadar yürütülmez aşağıdaki kodu.
async: falseÖlü gibi görünüyor , denedim ve aldım18:17:49.384 Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user’s experience. For more help http://xhr.spec.whatwg.org/ 1 jquery.js:9061:4
Eşzamansız alımı devre dışı bırakırsanız, komut dosyanız istek yerine getirilene kadar engellenir. Bilinen bir sırayla bazı istek dizilerini gerçekleştirmek için kullanışlıdır, ancak asenkron geri aramaların daha temiz olduğunu düşünüyorum.
Bir kullanım durumu, ajaxkullanıcı pencereyi kapatmadan veya sayfadan ayrılmadan önce arama yapmaktır . Bu, kullanıcı başka bir siteye geçmeden veya tarayıcıyı kapatmadan önce veritabanındaki bazı geçici kayıtları silmek gibi bir şeydir.
$(window).unload(
function(){
$.ajax({
url: 'your url',
global: false,
type: 'POST',
data: {},
async: false, //blocks window close
success: function() {}
});
});
itibaren
https://xhr.spec.whatwg.org/#synchronous-flag
Eşzamanlı XMLHttpRequest, işçilerin dışındaki son kullanıcının deneyimine zararlı etkileri olduğu için web platformundan kaldırılma sürecindedir. (Bu uzun yıllar süren uzun bir süreçtir.) JavaScript genel ortamı bir belge ortamı olduğunda geliştiriciler zaman uyumsuz argüman için yanlış iletmemelidir. Kullanıcı aracıları, geliştirici araçlarında bu tür kullanım konusunda uyarmaya şiddetle teşvik edilir ve gerçekleştiğinde bir InvalidAccessError istisnası atmayı deneyebilir. Gelecekteki yön, yalnızca çalışan iş parçacıklarında XMLHttpRequest öğelerine izin vermektir. Mesajın bu konuda bir uyarı olması amaçlanmıştır.
Zaman uyumsuzluğunu false olarak ayarlamak, ajax isteğini izleyen talimatların, isteğin tamamlanmasını beklemesi gerektiği anlamına gelir. Aşağıda, kodun düzgün çalışması için async değerini false olarak ayarlamak zorunda olduğunuz bir durum vardır.
var phpData = (function get_php_data() {
var php_data;
$.ajax({
url: "http://somesite/v1/api/get_php_data",
async: false,
//very important: else php_data will be returned even before we get Json from the url
dataType: 'json',
success: function (json) {
php_data = json;
}
});
return php_data;
})();
Yukarıdaki örnek, zaman uyumsuzluğun kullanımını açıkça açıklamaktadır : false
False olarak ayarlayarak, verilerin url'den alındıktan sonra yalnızca bu php_data döndürmesinden sonra emin olduk; denir
return php_dataifadenin başarı işlevinde olamayacağını, ancak $.ajax()işlevin dışında olması gerektiğini vurgular . Ben eşdeğer return php_dataiç içine koymuştu success: function(){}ve her zaman undefined dönüyordu