Можно ли установить async:false для вызова $.getJSON?
Можно ли установить async: false
при звонке $.getJSON()
так что блоки вызова, а не быть асинхронными?
7 ответов
Вы должны сделать звонок, используя $.ajax()
синхронно, вот так:
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
Это будет соответствовать в настоящее время, используя $.getJSON()
как это:
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
Оба ответа неверны. Вы можете. Вам нужно позвонить
$.ajaxSetup({
async: false
});
до вашего вызова JSON AJAX. И вы можете установить его в true после повторных вызовов (если на странице есть другие случаи использования 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));
Если вам просто нужно await
чтобы избежать вложенности кода:
let json;
await new Promise(done => $.getJSON('https://***', async function (data) {
json = data;
done();
}));
Ролл свой, например,
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);
})
Я не думаю, что вы можете установить эту опцию там. Вам придется использовать jQuery.ajax() с соответствующими параметрами (в основном, getJSON просто оборачивает этот вызов в более простой API).