109

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

4

7 に答える 7

157

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

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

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

$.getJSON(myUrl, myData, function(data) { 
  //stuff
  //...
});
于 2010-05-04T13:51:03.833 に答える
48

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

$.ajaxSetup({
async: false
});

jsonajax呼び出しの前に。そして、呼び出しが戻った後にそれをtrueに設定することができます(非同期にしたい場合は、ページ上にajaxの他の使用法がある場合)

于 2011-07-13T09:29:25.177 に答える
20

お二人とも正しいと思います。後者の答えは問題なく機能しますが、グローバルオプションを設定するのと似ているため、次のことを行う必要があります。

    $.ajaxSetup({
        async: false
    });

    //ajax call here

    $.ajaxSetup({
        async: true
    });
于 2013-05-21T16:43:27.597 に答える
11

私の場合、ジェイ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));
于 2016-03-28T07:22:09.020 に答える
1

awaitコードのネストを回避する必要がある場合:

let json;
await new Promise(done => $.getJSON('https://***', async function (data) {
    json = data;
    done();
}));
于 2018-08-20T23:38:38.527 に答える
0

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

于 2010-05-04T13:03:15.280 に答える
0

あなた自身の例を転がしてください

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);
})
于 2015-12-04T08:37:06.453 に答える