Esta pregunta seguramente podría aplicarse a jQuery, pero en este caso me refiero a Prototype. En el documento se dice Prototipo,¿Cuáles son los inconvenientes de utilizar la llamada ajax sincrónica?
Dado que el uso síncrono es bastante inquietante gusto, y por lo general mal, que debe evitar cambiar esto. Seriamente.
No estoy seguro de los inconvenientes de utilizar una llamada ajax sincrónica. Parece que hay muchos casos en los que debe esperar a que vuelva la llamada (sin utilizar las funciones de devolución de llamada específicas). Por ejemplo, actualmente uso Prototype's onSuccess, onFailure and onComplete
para manejar el resto del código.
Sin embargo, los servicios web que uso (todo internamente) abarcan la mayoría de los proyectos y me han encargado crear más código reutilizable. Un ejemplo sería una clase de cliente que devuelve las propiedades del cliente. Un ejemplo sencillo (hay que tener en cuenta que sólo estoy mostrando las funciones básicas que sea sencillo):
Customer = Class.create({
initialize: function(customerId) {
new Ajax.Request('some-url', {
method: 'get',
parameters: {
customerId: customerId
},
onSuccess: this.setCustomerInfo.bind(this)
}
},
setCustomerInfo: function(response) {
//for the sake of this example I will leave out the JSON validation
this.customerInfo = response.responseText.evalJSON();
}
});
Por lo tanto, el uso de esa clase simple que puede hacer lo siguiente en cualquier proyecto para obtener la información del cliente.
var customer = new Customer(1);
//now I have the customer info
document.write(customer.customerInfo.firstName);
El uso del código anterior no imprimirá el nombre del cliente. Esto se debe a que la llamada ajax es asincrónica. Ejecutará el document.write
independientemente de si el servicio web devolvió o no los datos del cliente. Pero no quiero hacer nada hasta que los datos vuelvan y la variable del cliente esté configurada. Para solucionarlo, establecí la llamada ajax en modo sincrónico para que el navegador no continúe hasta que finalice el new Customer(1);
.
Este método parece funcionar (configuración asíncrona a falso), pero leer los documentos del prototipo me da pausa. ¿Cuál es el inconveniente de usar este método? ¿Hay otra forma de hacerlo, más eficiente, etc.?
Agradecería cualquier comentario.
A continuación, voy a fruncir el ceño y aprender a codificar mejor :) – traviss0