Czy można ustawić async: false na $.getJSON call

Czy można ustawić async: false podczas wywoływania $.getJSON() tak, aby wywołanie blokowało się, a nie było asynchroniczne?

Author: Jacob Marble, 2010-05-04

7 answers

Musisz wykonać połączenie używając $.ajax() do niego synchronicznie, Tak:

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

Pasuje do aktualnie używanego $.getJSON() Tak:

$.getJSON(myUrl, myData, function(data) { 
  //stuff
  //...
});
 144
Author: Nick Craver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-19 16:29:50

Obie odpowiedzi są błędne. Możesz. Musisz zadzwonić

$.ajaxSetup({
async: false
});

Przed wywołaniem JSON ajax. I możesz ustawić go na true po wywołaniu retuns (jeśli są inne zastosowania ajax na stronie, jeśli chcesz je asynchronizować)

 45
Author: velja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-01 01:37:49

Myślę, że oboje macie rację. Późniejsza odpowiedź działa dobrze, ale jej jak ustawienie opcji globalnej, więc musisz wykonać następujące czynności:

    $.ajaxSetup({
        async: false
    });

    //ajax call here

    $.ajaxSetup({
        async: true
    });
 16
Author: webdev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-21 16:43:27

W moim przypadku Jay D ma rację. Muszę to dodać przed telefonem.

$.ajaxSetup({
    async: false
});

W poprzednim kodzie mam to:

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

To działa znaleźć. Następnie zmieniam na

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

Alarm jest nieokreślony.

Jeśli dodam te trzy linie, alert ponownie wyświetli dane.

$.ajaxSetup({
    async: false
});
var jsonData= (function() {
    var result;
    $.getJSON('data.txt', {}, function(data){
      result = data;
    });
    return result;
})();
alert(JSON.stringify(jsonData));
 7
Author: ronrun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-28 07:22:09

Myślę, że nie możesz tam ustawić tej opcji. Musisz użyć jQuery.ajax () z odpowiednimi parametrami (zasadniczo getJSON po prostu zawija to wywołanie w łatwiejsze API).

 0
Author: Daff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-04 13:03:15

Roll your own np.

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
Author: Stonedecroze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-04 08:37:06

Jeśli potrzebujesz await, aby uniknąć zagnieżdżania kodu:

let json;
await new Promise(done => $.getJSON('https://***', async function (data) {
    json = data;
    done();
}));
 0
Author: k06a,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-20 23:38:38