Можно ли установить async: false в $.помощью метода getjson вызов


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

7 96

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

Я не думаю, что вы можете установить эту опцию там. Вам придется использовать 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);
})

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

let json;
await new Promise(done => $.getJSON('https://***', async function (data) {
    json = data;
    done();
}));