¿Es posible configurar async: false
al llamar $.getJSON()
para que la llamada se bloquee en lugar de ser asincrónica?
¿Es posible configurar async: false
al llamar $.getJSON()
para que la llamada se bloquee en lugar de ser asincrónica?
Respuestas:
Necesita hacer la llamada usándola $.ajax()
sincrónicamente, así:
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
Esto coincidiría con el uso actual de $.getJSON()
esta manera:
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
type: 'POST'
opción para convertirlo en una publicación, aunque no quieres usarlo a async: false
menos que realmente lo necesites, bloqueará la interfaz de usuario.
Ambas respuestas son incorrectas. Usted puede. Necesitas llamar
$.ajaxSetup({
async: false
});
antes de su llamada json ajax. Y puede configurarlo en verdadero después de la devolución de llamadas (si hay otros usos de ajax en la página si los desea asíncronos)
$.ajax
(y envolturas de taquigrafía subsiguientes $.getJSON
, es decir $.get
, etc.) para que sean sincrónicas. Además, la documentación incluso sugiere no usar esto: "Descripción: Establecer valores predeterminados para futuras solicitudes de Ajax. No se recomienda su uso".
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. Entonces 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 los datos nuevamente.
$.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á que usar jQuery.ajax () con los parámetros apropiados (básicamente getJSON simplemente envuelve esa llamada en una API más fácil, también).
Ruede su propio 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);
})