Ho un'applicazione backbone con un numero di visualizzazioni. Il passaggio da una vista all'altra attiva le richieste Ajax per ottenere raccolte diverse. Vorrei interrompere l'attuale richiesta "legge" ajax se ne viene avviato uno nuovo. È possibile?È possibile interrompere le richieste di lettura "backbone"
risposta
Ok ecco quello che ho fatto
sto salvando il la le richieste di recupero in una variabile
app.fetchXhr = this.model.fetch();
Nel mio router, ho una funzione che si prende cura di chiudere i punti di vista e rendere viste . Si occupa anche dell'attivazione di eventuali trigger necessari per ogni cambio di visualizzazione ma ciò non è rilevante in questa domanda.
Prima di fare qualsiasi cosa, questa funzione router esegue il seguente
//Stop pending fetch
if(app.fetchXhr.readyState > 0 && app.fetchXhr.readyState < 4){
app.fetchXhr.abort();
}
Spero che questo aiuta
Presumo che tu stia utilizzando il backbone con jQuery. Se è così, la seguente domanda sembra fornire una risposta per voi:
Abort Ajax requests using jQuery
Backbone fetch
restituisce il xhr
stanno parlando, IIRC.
ma non recuperare il ritorno xhr dopo che è stato completato? Non sei sicuro di come utilizzare il link che hai fornito per implementarlo in Backbone – Xerri
Backbone utilizza normali chiamate ajax (tramite Zepto o jQuery), il che significa che la chiamata al server è asincrona e può ancora essere potenzialmente terminata. – JayC
Probabilmente una risposta in ritardo :)
Usa timeout per specificare un valore di timeout. Questo attiverà la funzione di errore. Qui la query può essere interrotta.
C'è qualche motivo per cui vuoi interrompere la query?
Vorrei interromperlo perché se cambio la vista prima che la query sia completa, un errore verrebbe generato quando il recupero è completo e la vista verrebbe rimossa. – Xerri
Un'altra risposta tardiva nel caso in cui qualcun altro si imbattesse in questo.
Ho finito per sovrascrivere Backbone.sync per aggiungere un pool di oggetti XHR e un'opzione per interrompere le richieste in sospeso su 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);
}
};
Molto interessante .... potrebbe non essere flessibile se si eseguono più richieste di recupero in una vista particolare. Cordiali saluti ... Una delle ragioni per cui avevo bisogno di questo era evitare di generare errori quando un recupero è completo ma la vista è cambiata (quindi l'elemento DOM che avrebbe contenuto i dati non è più lì). Una semplice prova/cattura intorno al recupero risolto questo. – Xerri
- 1. jQuery: effettuare richieste ajax simultanee, è possibile?
- 2. È possibile interrompere l'esecuzione in javascript/jquery?
- 3. È possibile utilizzare ZeroMQ per accettare le richieste socket tradizionali?
- 4. accelera le richieste Ajax - è possibile applicare la compressione gzip?
- 5. È possibile copiare le richieste come cURL in Safari?
- 6. Fatale: non è possibile avanzare rapidamente, interrompere
- 7. È possibile interrompere una richiesta XmlHttpRequest sincrona?
- 8. È possibile distinguere le richieste HTTP effettuate via 3G da altre richieste
- 9. È possibile interrompere l'attesa da parte di cin?
- 10. È possibile inviare "richieste" LDAP via telnet?
- 11. È possibile ottenere le indicazioni di Google Maps utilizzando le richieste HTTP?
- 12. È possibile interrompere la garbage collection di .NET?
- 13. Come interrompere una lettura su Java Socket?
- 14. Streaming scaricare file di grandi dimensioni con python-richieste interrompere
- 15. È possibile (con Moq) interrompere le chiamate di metodo con i parametri Lambda?
- 16. È possibile impostare le dipendenze per una cartella usando require.js?
- 17. È possibile imporre il comportamento di sola lettura con SqlCommand?
- 18. È possibile effettuare richieste JSON utilizzando il Builder di Fiddler?
- 19. Finestra di dialogo Richieste Facebook: è possibile eseguire richieste senza attrito nell'app iOS nativa?
- 20. È possibile annullare/interrompere un download avviato utilizzando DownloadManager?
- 21. È possibile impostare gdb per interrompere ogni lancio?
- 22. C# durante la lettura dell'input dell'utente senza interrompere un'app
- 23. Scala - Non è possibile utilizzare un metodo di ritorno play.api.mvc.Result come gestore per le richieste
- 24. È possibile che le transazioni di un database si estendano su più richieste nelle rotaie?
- 25. uWSGI: non è stato caricato alcun plugin di richiesta, non sarà possibile gestire le richieste
- 26. È possibile interrompere le righe jqGrid dalla selezione e/o evidenziate?
- 27. È possibile la proprietà auto-implementata di sola lettura?
- 28. System.Web.HttpContext.Current è statico tra le richieste
- 29. gestire le autorizzazioni con backbone
- 30. Di chi è la responsabilità di limitare le richieste web?
Ho un problema correlato ma ho più di una collezione. Quindi, prima di interrompere una richiesta, devo essere sicuro che sia associata a una raccolta specifica. Ho fatto questa domanda qui, forse hai già affrontato questo problema? http://stackoverflow.com/questions/21919690/association-between-backbone-collection-and-xhr-object-created-when-fetching – wuliwong
Non ha ancora implementato questo, ma una cosa che puoi provare è memorizzare tutto xhr richieste in un array. Su ciascuna richiesta xhr o su ogni modifica di vista è possibile scorrere l'array per cancellare quelli completi e per interrompere quelli che si desidera interrompere. Questo dovrebbe fornire una pulizia adeguata. – Xerri