$.getJSON()
を呼び出すときにasync: false
を設定して、非同期ではなく呼び出しがブロックされるようにすることはできますか?
次のように、同期的に $.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
});
私の場合、ジェイ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));
あなた自身のロール.
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);
})
そこにそのオプションを設定できるとは思わない。適切なパラメーターを指定して jQuery.ajax() を使用する必要があります(基本的に、getJSONは呼び出しを簡単なAPIにラップするだけです)。
コードのネストを避けるためにawait
だけが必要な場合:
let json;
await new Promise(done => $.getJSON('https://***', async function (data) {
json = data;
done();
}));