È possibile impostare async: false
durante la chiamata in $.getJSON()
modo che la chiamata si blocchi anziché essere asincrona?
È possibile impostare async: false
durante la chiamata in $.getJSON()
modo che la chiamata si blocchi anziché essere asincrona?
Risposte:
È necessario effettuare la chiamata utilizzando $.ajax()
in modo sincrono, in questo modo:
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
Ciò corrisponderebbe attualmente utilizzando in $.getJSON()
questo modo:
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
type: 'POST'
un'opzione per trasformarlo in un post, anche se non vuoi usarlo a async: false
meno che non sia davvero necessario - bloccherà l'interfaccia utente.
Entrambe le risposte sono sbagliate. Puoi. Devi chiamare
$.ajaxSetup({
async: false
});
prima della tua chiamata json ajax. E puoi impostarlo su true dopo la ripetizione della chiamata (se ci sono altri usi di ajax sulla pagina se li vuoi asincroni)
$.ajax
(e i successivi wrapper abbreviati $.getJSON
, ad esempio $.get
, ecc.) In modo che siano sincrone. Inoltre, la documentazione suggerisce anche di non usare questo: "Descrizione: imposta i valori predefiniti per le future richieste Ajax. Il suo utilizzo non è raccomandato."
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. Quindi cambio in
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 righe, l'avviso mostra nuovamente 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 quell'opzione lì. Dovrai utilizzare jQuery.ajax () con i parametri appropriati (in pratica getJSON avvolge anche quella chiamata in un'API più semplice).
Roll il tuo ad es
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);
})