¿Es posible establecer async: false
al llamar al $.getJSON()
para que la llamada bloquee en lugar de ser asincrónica?
Respuesta
Usted necesita para realizar la llamada utilizando $.ajax()
a ella de forma sincrónica, así:
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
ello se compararán usando actualmente $.getJSON()
así:
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
He encontrado que el método de conveniencia $ .getJSON() casi nunca es útil y siempre termina usando $ .ajax(). –
¿Puedo usar esto para la llamada POST también? – Hitesh
@hitesh Sí, agregaría una opción 'tipo: 'POST'' también para convertirla en una publicación, aunque no desea usar' async: false' a menos que * realmente * necesite hacerlo Bloqueará la interfaz de usuario. –
No creo que pueda establecer esa opción allí. Tendrá que usar jQuery.ajax() con los parámetros apropiados (básicamente getJSON también ajusta esa llamada a una API más sencilla).
Ambas respuestas son incorrectas. Puedes. Es necesario llamar
$.ajaxSetup({
async: false
});
antes de que su llamada AJAX JSON. Y puede configurarlo en true después de volver a llamar (si hay otros usos de ajax en la página si lo quiere asíncrono)
Los documentos de jquery dicen lo contrario. –
¿Puede indicarme parte en donde dice lo contrario? – velja
Acabo de volver a leer esa parte de los documentos. Aquí está la parte que habla sobre ajaxSetup: http://api.jquery.com/jQuery.ajaxSetup/ Y estas son las opciones: http://api.jquery.com/jQuery.ajax/ Dice claramente: "async Predeterminado: true De manera predeterminada, todas las solicitudes se envían de forma asíncrona (es decir, se establece de manera predeterminada). Si necesita solicitudes sincrónicas, establezca esta opción en falso. Solicitudes entre dominios y tipo de datos:" jsonp " las solicitudes no son compatibles con la operación síncrona. " JSONP no es JSON, así que todavía creo que estoy en lo cierto desde el principio. Escribiré un ejemplo más adelante cuando tenga algo de tiempo. – velja
Creo que ambos tienen razón. La respuesta más adelante funciona bien, pero es como el establecimiento de una opción global por lo que tiene que hacer lo siguiente:
$.ajaxSetup({
async: false
});
//ajax call here
$.ajaxSetup({
async: true
});
liar por ejemplo,
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);
})
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 unas pocas cosas:
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 Encuentra. 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));
- 1. Configuración async: ¿falso con jQuery?
- 2. Explique el comportamiento extraño de .call (falso)
- 3. Cómo establecer la codificación en .getJSON JQuery
- 4. ¿Es posible crear el método call dispatcher en C++?
- 5. Tácticas para evitar el uso de async: ¿falso con jQuery?
- 6. ¿Es posible utilizar async/await en webmethod servicio de asmx
- 7. ¿Es posible usar call/cc para implementar la recursión?
- 8. ¿Es posible establecer MasterType programáticamente?
- 9. ¿es posible establecer múltiples colores en UILabel?
- 10. ¿Qué es call/cc?
- 11. ¿Es posible establecer un objeto como nulo?
- 12. ¿Es posible establecer drawableLeft mediante programación?
- 13. OpenGL ES Async texture loading
- 14. beforeEnviar en $ .getJSON
- 15. AutomaticMigrationsEnabled ¿es falso o verdadero?
- 16. Establecer predeterminado para DisplayFormatAttribute.ConvertEmptyStringToNull en falso en el sitio
- 17. View.isHardwareAccelerated() es siempre falso
- 18. ((171.36/1.19) == 144) es falso?
- 19. ¿Es posible establecer una fuente diferente en One UIlabel?
- 20. ¿Es posible establecer cabeceras HTTP personalizado en la vista Web
- 21. ¿Es posible establecer la afinidad con sched_setaffinity en Android?
- 22. ¿Es posible establecer dinámicamente RequestMappings en Spring MVC?
- 23. ¿Es posible establecer la transparencia en CSS3 box-shadow?
- 24. ¿Es posible establecer el ancho de un jQGrid en porcentaje?
- 25. ¿Es posible establecer un punto de interrupción en funciones anónimas?
- 26. ¿es posible establecer cookies en otro dominio con javascript?
- 27. ¿Es posible establecer columna predeterminada en NewId() de SQL Server?
- 28. ¿Es posible establecer un bloque como destino en un UIButton?
- 29. Comprobar si es falso
- 30. ¿Cómo establecer las variables de python en verdadero o falso?
Sólo hay que poner el código en la devolución de llamada .... Hay una razón de que esto está en desuso - es una mala idea – Milney
@Milney - Muy extraño ... Oficialmente, _es_ obsoleto; de hecho, es _no_. Si fuera realmente obsoleto, la posibilidad de hacer una llamada AJAX sincronizada o un conmutador $ ajax.setup se habría eliminado en jQuery 3. De hecho, una llamada de sincronización es de vez en cuando muy útil, por ejemplo al inicializar globales con Datos JSON, cuando tienes otros globales que dependen del primer lote. (El empaquetado de todo el proceso de inicialización en la función de devolución de llamada podría ser muy complicado en determinadas circunstancias). –