È ansible impostare async: false su $ .getJSON call

È ansible impostare async: false quando si chiama $.getJSON() modo che la chiamata blocchi anziché essere asincrona?

È necessario effettuare la chiamata utilizzando $.ajax() in modo sincrono, come questo:

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

Questo corrisponderebbe al momento usando $.getJSON() questo modo:

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

Entrambe le risposte sono sbagliate. Puoi. Devi chiamare

 $.ajaxSetup({ async: false }); 

prima della tua chiamata ajax json. E puoi impostarlo su retun vero dopo chiamata (se ci sono altri usi di ajax sulla pagina se vuoi che siano asincroni)

Penso che entrambi abbiate ragione. La risposta successiva funziona bene ma è come impostare un’opzione globale, quindi è necessario effettuare le seguenti operazioni:

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

Nel mio caso, Jay D ha ragione. Devo aggiungere questo prima della chiamata.

 $.ajaxSetup({ async: false }); 

Nel mio codice precedente, ho questo:

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

Funziona trovare. Poi cambio a

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

L’avviso non è definito.

Se aggiungo queste tre linee, l’avviso mostra di nuovo i dati.

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

Non penso che tu possa impostare questa opzione lì. Dovrai utilizzare jQuery.ajax () con i parametri appropriati (in pratica getJSON semplicemente avvolge la chiamata in un’API più semplice).

Roll your own eg

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

Se hai solo bisogno di await per evitare il codice di nidificazione:

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