async: false
호출 할 때 $.getJSON()
비동기가 아닌 호출이 차단되도록 설정할 수 있습니까?
답변
다음과 같이을 사용 $.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
});
답변
제 경우에는 Jay 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));
경고가 정의되지 않았습니다.
이 세 줄을 추가하면 경고에 데이터가 다시 표시됩니다.
$.ajaxSetup({
async: false
});
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
답변
await
중첩 코드를 피해야 하는 경우 :
let json;
await new Promise(done => $.getJSON('https://***', async function (data) {
json = data;
done();
}));
답변
거기에서 그 옵션을 설정할 수 없다고 생각합니다. 적절한 매개 변수와 함께 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);
})