Чи можна встановити async: false
при виклику $.getJSON()
так, щоб блоки викликів замість того, щоб бути асинхронними?
Чи можна встановити async: false
при виклику $.getJSON()
так, щоб блоки викликів замість того, щоб бути асинхронними?
Відповіді:
Вам потрібно здійснити дзвінок за допомогою $.ajax()
нього синхронно, наприклад:
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
Зараз це відповідає $.getJSON()
таким чином:
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
type: 'POST'
параметр, щоб також перетворити його на публікацію - хоча ви не хочете користуватися, async: false
якщо вам це не потрібно - це заблокує інтерфейс користувача.
Обидві відповіді неправильні. Ти можеш. Вам потрібно зателефонувати
$.ajaxSetup({
async: false
});
перед тим, як зателефонувати json Ajax. І ви можете встановити це значення true після повторного виклику (якщо на сторінці є інші звички ajax, якщо ви хочете, щоб вони асинхронізували)
$.ajax
(і наступні скорочені обгортки , тобто $.getJSON
, $.get
і т.д.) , щоб бути синхронними. Крім того, документація навіть пропонує не використовувати це: "Опис: Встановити значення за замовчуванням для майбутніх запитів Ajax. Його використання не рекомендується."
У моєму випадку Джей Д має рацію. Я маю додати це до дзвінка.
$.ajaxSetup({
async: false
});
У своєму попередньому коді я маю це:
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));
Це працює знайти. Потім я переходжу на
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
Попередження не визначено.
Якщо я додаю ці три рядки, попередження знову відображатиме дані.
$.ajaxSetup({
async: false
});
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
Я не думаю, що ви можете встановити цю опцію там. Вам доведеться використовувати jQuery.ajax () з відповідними параметрами (в основному getJSON також перетворює, що викликає, у більш простий API).
Скачайте власні, наприклад
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);
})