web-dev-qa-db-ja.com

async:falseを$ .getJSON呼び出しに設定することは可能ですか?

$.getJSON()を呼び出すときにasync: falseを設定して、非同期ではなく呼び出しがブロックされるようにすることはできますか?

99
ACP

次のように、同期的に $.ajax() を使用して呼び出しを行う必要があります。

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

これは、現在 $.getJSON() を使用して次のように一致します。

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

両方の答えが間違っています。あなたはできる。電話する必要があります

$.ajaxSetup({
async: false
});

json ajax呼び出しの前に。そして、呼び出しを再開した後にtrueに設定できます(ページにajaxの非同期使用が必要な場合、ページに他の使用方法がある場合)

44
velja

どちらも正しいと思います。後者の答えは問題なく機能しますが、グローバルオプションを設定するようなものなので、次のことを行う必要があります。

    $.ajaxSetup({
        async: false
    });

    //ajax call here

    $.ajaxSetup({
        async: true
    });
17
webdev

私の場合、ジェイ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));

アラートは未定義です。

これらの3行を追加すると、アラートにデータが再び表示されます。

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

あなた自身のロール.

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
Stonedecroze

そこにそのオプションを設定できるとは思わない。適切なパラメーターを指定して jQuery.ajax() を使用する必要があります(基本的に、getJSONは呼び出しを簡単なAPIにラップするだけです)。

0
Daff

コードのネストを避けるためにawaitだけが必要な場合:

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