Можно ли установить async: false для вызова $ .getJSON? - PullRequest
98 голосов
/ 04 мая 2010

Можно ли установить async: false при вызове $.getJSON(), чтобы вызов блокировался, а не был асинхронным?

Ответы [ 7 ]

150 голосов
/ 04 мая 2010

Вам необходимо сделать вызов, используя $.ajax() синхронно, например:

$.ajax({
  url: myUrl,
  dataType: 'json',
  async: false,
  data: myData,
  success: function(data) {
    //stuff
    //...
  }
});

Это будет соответствовать в настоящее время, используя $.getJSON() как это:

$.getJSON(myUrl, myData, function(data) { 
  //stuff
  //...
});
44 голосов
/ 13 июля 2011

Оба ответа неверны. Вы можете. Вам нужно позвонить

$.ajaxSetup({
async: false
});

до вашего вызова JSON AJAX. И вы можете установить его в true после повторных вызовов (если на странице есть другие применения ajax, если вы хотите, чтобы они были асинхронными)

16 голосов
/ 21 мая 2013

Я думаю, что вы оба правы. Более поздний ответ работает нормально, но он похож на настройку глобальной опции, поэтому вам нужно сделать следующее:

    $.ajaxSetup({
        async: false
    });

    //ajax call here

    $.ajaxSetup({
        async: true
    });
7 голосов
/ 28 марта 2016

В моем случае Джей Ди прав. Я должен добавить это до звонка.

$.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));
0 голосов
/ 21 августа 2018

Если вам просто нужно await, чтобы избежать вложения кода:

let json;
await new Promise(done => $.getJSON('https://***', async function (data) {
    json = data;
    done();
}));
0 голосов
/ 04 декабря 2015

Сверните, например,

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);
})
0 голосов
/ 04 мая 2010

Я не думаю, что вы можете установить эту опцию там. Вам нужно будет использовать jQuery.ajax () с соответствующими параметрами (в основном getJSON просто оборачивает этот вызов в более простой API).

...