Можно ли установить async: false для вызова $.getJSON

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

Ответ 1

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

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

Теперь это будет соответствовать $.getJSON() следующим образом:

$.getJSON(myUrl, myData, function(data) { 
  //stuff
  //...
});

Ответ 2

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

$.ajaxSetup({
async: false
});

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

Ответ 3

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

    $.ajaxSetup({
        async: false
    });

    //ajax call here

    $.ajaxSetup({
        async: true
    });

Ответ 4

В моем случае Jay D прав. Я должен добавить это перед вызовом.

$.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));

Предупреждение undefined.

Если я добавлю эти три строки, предупреждение снова отобразит данные.

$.ajaxSetup({
    async: false
});
var jsonData= (function() {
    var result;
    $.getJSON('data.txt', {}, function(data){
      result = data;
    });
    return result;
})();
alert(JSON.stringify(jsonData));

Ответ 5

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

Ответ 6

Сверните свой собственный, например.

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);
})