Apakah mungkin untuk mengatur async: false
saat memanggil $.getJSON()
sehingga panggilan memblokir daripada menjadi asinkron?
Apakah mungkin untuk mengatur async: false
saat memanggil $.getJSON()
sehingga panggilan memblokir daripada menjadi asinkron?
Jawaban:
Anda perlu melakukan panggilan menggunakan $.ajax()
itu secara sinkron, seperti ini:
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
Ini akan cocok saat ini menggunakan $.getJSON()
seperti ini:
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
type: 'POST'
opsi untuk mengubahnya menjadi posting - meskipun Anda tidak ingin menggunakannya async: false
kecuali Anda benar - benar perlu - itu akan mengunci UI.
Kedua jawaban itu salah. Kamu bisa. Anda perlu menelepon
$.ajaxSetup({
async: false
});
sebelum panggilan json ajax Anda. Dan Anda dapat mengaturnya ke true setelah panggilan retuns (jika ada penggunaan ajax lain di halaman jika Anda ingin async)
$.ajax
(dan pembungkus singkatan berikutnya $.getJSON
, misalnya $.get
, dll.) Agar sinkron. Lebih lanjut, dokumentasi bahkan menyarankan untuk tidak menggunakan ini: "Deskripsi: Setel nilai default untuk permintaan Ajax di masa mendatang. Penggunaannya tidak disarankan."
Dalam kasus saya, Jay D benar. Saya harus menambahkan ini sebelum panggilan.
$.ajaxSetup({
async: false
});
Dalam kode saya sebelumnya, saya memiliki ini:
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));
Ia berhasil menemukan. Lalu saya ganti ke
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
Lansiran tidak ditentukan.
Jika saya menambahkan ketiga baris tersebut, peringatan akan menampilkan data lagi.
$.ajaxSetup({
async: false
});
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
Saya rasa Anda tidak dapat menyetel opsi itu di sana. Anda harus menggunakan jQuery.ajax () dengan parameter yang sesuai (pada dasarnya getJSON hanya membungkus panggilan itu ke dalam API yang lebih mudah, juga).
Gulung mis Anda sendiri
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);
})