Tengo una aplicación de red troncal que tiene varias vistas. Al cambiar de vista, se activan las solicitudes de Ajax para obtener diferentes colecciones. Me gustaría detener la solicitud actual de "leer" ajax si se inicia una nueva. ¿Es posible?¿Es posible detener las solicitudes de "lectura" del Backbone?
Respuesta
Ok, así que aquí es lo que hice
Estoy ahorrando el la solicitudes pelota en una variable
app.fetchXhr = this.model.fetch();
En mi router, tengo una función que se encarga de cerrar los puntos de vista y de la representación vistas . También se ocupa de desencadenar los activadores necesarios para cada cambio de vista, pero eso no es relevante en esta pregunta.
Antes de hacer nada, esta función de router efectúa los siguientes
//Stop pending fetch
if(app.fetchXhr.readyState > 0 && app.fetchXhr.readyState < 4){
app.fetchXhr.abort();
}
espero que esto ayude a
Supongo que está utilizando la red troncal con jQuery. Si es así, la siguiente pregunta parece proporcionar una respuesta para usted:
Abort Ajax requests using jQuery
Backbone fetch
devuelve el xhr
que están hablando, IIRC.
pero no recuperar el retorno xhr una vez que se haya completado? No estoy seguro de cómo usar el enlace que proporcionó para implementarlo en Backbone – Xerri
Backbone utiliza llamadas ajax normales (a través de Zepto o jQuery), lo que significa que la llamada al servidor es asincrónica y aún puede finalizar. – JayC
Probablemente su respuesta el mismo :)
uso de tiempo de espera para especificar un valor de tiempo de espera. Esto desencadenará la función de error. Aquí la consulta puede ser abortada.
¿Hay alguna razón por la que desee abortar la consulta?
Quisiera abortar porque si cambio la vista antes de que se complete la consulta, se generará un error cuando se complete la búsqueda y se elimine la vista. – Xerri
Otra respuesta tardía en caso de que alguien más se encuentre con esto.
Terminé sobrescribiendo Backbone.sync para agregar un grupo de objetos XHR y una opción para abortar solicitudes pendientes en fetch.
var sync = Backbone.sync
, xhrPool = [];
Backbone.sync = function(method, model, options) {
options = options || {};
if (method === 'read') {
if (options.abortPending == true) {
for (var i = 0; i < xhrPool.length; i++) {
if (xhrPool[i]['readyState'] > 0 && xhrPool[i]['readyState'] < 4) {
xhrPool[i].abort();
xhrPool.splice(i, 1);
}
}
}
// cleanup xhrPool
// todo: make removal from the pool an 'always' jqXHR callback
// instead of cleanup on every read?
for (var i = 0; i < xhrPool.length; i++) {
if (xhrPool[i]['readyState'] === 4) {
xhrPool.splice(i, 1);
}
}
var xhr = sync(method, model, options);
xhrPool.push(xhr);
return xhr;
} else {
return sync(method, model, options);
}
};
Muy bueno ... podría no ser flexible si realiza múltiples solicitudes de búsqueda en una vista particular. FYI ... Una de las razones por las que necesitaba esto era para evitar que se lanzaran errores cuando se completa una búsqueda, pero la vista ha cambiado (por lo que el elemento DOM que habría contenido los datos ya no está allí). Un simple try/catch alrededor de la búsqueda solucionó esto. – Xerri
- 1. ¿Es posible distinguir las solicitudes HTTP realizadas a través de 3G de otras solicitudes?
- 2. Enrutamiento del backbone con las subvistas
- 3. jQuery: Hacer solicitudes de ajax simultáneas, ¿es posible?
- 4. Javascript: Cancelar/Detener solicitudes de imagen
- 5. ¿Es posible que las solicitudes XHR HEAD no sigan redirecciones (301 302)
- 6. ¿Es posible detener cin de la entrada de espera?
- 7. ¿Es posible eliminar las cookies del subdominio?
- 8. ¿Es posible enviar "solicitudes" de LDAP a través de telnet?
- 9. Registrar las solicitudes y las respuestas del cliente del eje2
- 10. ¿Es posible obtener direcciones de Google Maps usando solicitudes HTTP?
- 11. ¿Es posible crear un interbloqueo con acceso de solo lectura?
- 12. ¿Es posible aplicar el comportamiento de solo lectura con SqlCommand?
- 13. ¿Es posible que las transacciones de una base de datos abarquen varias solicitudes en los rieles?
- 14. ¿Es posible hacer solicitudes http reales con robolectric
- 15. ¿Es posible hacer solicitudes JSON utilizando el Creador de solicitudes de Fiddler?
- 16. ¿Es posible detener la recolección de basura .NET?
- 17. ¿Es posible detener ObjectDataSource de la vinculación automática?
- 18. ¿Es posible detener una etiqueta de script insertada dinámicamente?
- 19. ¿Es posible reenviar las solicitudes ssh que llegan a través de cierto puerto a otra máquina?
- 20. ¿Es posible detener la barra de desplazamiento vertical para que no empuje las columnas/encabezado del DataGrid hacia la izquierda?
- 21. ¿Es posible dejar que las cárceles chroot compartan directorios (de solo lectura) fuera de la cárcel?
- 22. ¿Es posible la propiedad de solo lectura y auto implementada?
- 23. ¿Es posible tener un .gitignore personalizado? ¿Acceso de solo lectura?
- 24. ¿Es posible tratar una tabla como solo lectura en hibernación?
- 25. Subversion: ¿es posible deshabilitar todas las confirmaciones y hacer que el repositorio solo sea de lectura?
- 26. Backbone: ¿es posible vincular un evento de cambio a un modelo, a excepción de una propiedad?
- 27. ¿De quién es la responsabilidad de restringir las solicitudes web?
- 28. Seguridad de las solicitudes AJAX
- 29. Es ASP.NET multiproceso (cómo se ejecutan las solicitudes)
- 30. ¿es mejor o agrupar mis solicitudes de AJAX o enviar todas las solicitudes por separado?
Tengo un problema relacionado pero tengo más de una colección. Entonces, antes de abortar una solicitud, necesito estar seguro de que está asociada a una colección específica. Hice esa pregunta aquí, ¿quizás ya has abordado este problema también? http://stackoverflow.com/questions/21919690/association-between-backbone-collection-and-xhr-object-created-when-fetching – wuliwong
No implemento esto todavía, pero una cosa que puede intentar es almacenar todo xhr solicitudes en una matriz. En cada solicitud xhr o en cada cambio de vista, puede recorrer la matriz para borrar las que están completas y detener aquellas que desea detener. Eso debería proporcionar una limpieza adecuada. – Xerri