[jquery] async : false를 $ .getJSON 호출로 설정할 수 있습니까?

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