O ayarlamak mümkün mü async: false
çağrılırken $.getJSON()
çağrı blokları yerine asenkron olmak o kadar?
O ayarlamak mümkün mü async: false
çağrılırken $.getJSON()
çağrı blokları yerine asenkron olmak o kadar?
Yanıtlar:
Çağrıyı $.ajax()
şu şekilde eşzamanlı olarak yapmanız gerekir :
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
Bu, şu anda şu şekilde eşleşir $.getJSON()
:
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
type: 'POST'
seçenek de eklersiniz - ancak gerçekten ihtiyacınız async: false
olmadıkça kullanmak istemezsiniz - kullanıcı arayüzünü kilitler.
Her iki cevap da yanlış. Yapabilirsin. Araman gerek
$.ajaxSetup({
async: false
});
json ajax aramanızdan önce. Ve çağrı yeniden çalıştırmalarından sonra bunu true olarak ayarlayabilirsiniz (sayfada ajax'ın başka kullanımları varsa, asenkron olmasını istiyorsanız)
$.ajax
(ve sonraki stenografi sarmalayıcıları yani $.getJSON
, $.get
vb) senkron olması. Dahası, belgeler bunu kullanmamayı bile öneriyor: "Açıklama: Gelecekteki Ajax istekleri için varsayılan değerleri ayarlayın. Kullanımı önerilmez."
Benim durumumda Jay D haklı. Bunu aramadan önce eklemeliyim.
$.ajaxSetup({
async: false
});
Önceki kodumda şu var:
var jsonData= (function() {
var result;
$.ajax({
type:'GET',
url:'data.txt',
dataType:'json',
async:false,
success:function(data){
result = data;
}
});
return result;
})();
alert(JSON.stringify(jsonData));
Çalışır bul. Sonra değiştim
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
Uyarı tanımsız.
Bu üç satırı eklersem, uyarı verileri tekrar gösterir.
$.ajaxSetup({
async: false
});
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
O seçeneği orada ayarlayabileceğinizi sanmıyorum. JQuery.ajax () ' ı uygun parametrelerle kullanmanız gerekecek ( temelde getJSON bu çağrıyı daha kolay bir API'ye sarar).
Kendi örneğinizi atın
function syncJSON(i_url, callback) {
$.ajax({
type: "POST",
async: false,
url: i_url,
contentType: "application/json",
dataType: "json",
success: function (msg) { callback(msg) },
error: function (msg) { alert('error : ' + msg.d); }
});
}
syncJSON("/pathToYourResouce", function (msg) {
console.log(msg);
})