Можно ли настроить 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
});
//ajax call here
$.ajaxSetup({
async: true
});
В моем случае Джей Ди прав. Я должен добавить это перед звонком.
$.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);
})