¿Es posible establecer una llamada async: false a $ .getJSON?

¿Es posible establecer async: false cuando se llama $.getJSON() para que la llamada bloquee en lugar de ser asincrónica?

Necesita hacer la llamada usando $.ajax() sincrónicamente, de esta manera:

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

Esto coincidiría usando $.getJSON() esta manera:

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

Ambas respuestas son incorrectas. Usted puede. Tienes que llamar

 $.ajaxSetup({ async: false }); 

antes de tu llamada a jason ajax. Y puede configurarlo en true después de volver a llamar (si hay otros usos de ajax en la página si desea que sean asincrónicos)

Creo que ambos tienen razón. La respuesta posterior funciona bien, pero es como establecer una opción global, por lo que debe hacer lo siguiente:

  $.ajaxSetup({ async: false }); //ajax call here $.ajaxSetup({ async: true }); 

En mi caso, Jay D tiene razón. Tengo que agregar esto antes de la llamada.

 $.ajaxSetup({ async: false }); 

En mi código anterior, tengo esto:

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

Funciona encontrar. Luego cambio a

 var jsonData= (function() { var result; $.getJSON('data.txt', {}, function(data){ result = data; }); return result; })(); alert(JSON.stringify(jsonData)); 

La alerta no está definida.

Si agrego esas tres líneas, la alerta muestra nuevamente los datos.

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

No creo que puedas establecer esa opción allí. Tendrás que usar jQuery.ajax () con los parámetros apropiados (básicamente, getJSON también ajusta esa llamada a una API más sencilla).

Haga rodar su propio ej.

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

Si solo necesitas await para evitar el código de anidación:

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