2013-01-18 5 views
10

Uso il backbone su un mio progetto, integrato con la comunicazione con un'API esterna. Voglio utilizzare l'aggiornamento in tempo reale dei record. Dato che non ho accesso al backend principale di questa applicazione esterna e non forniscono né websocket server né endpoint a lungo polling, in pratica mi rimane l'opzione di fare polling regolare con setInterval e un periodo di 50 secondi . Ha funzionato abbastanza bene. Il mio problema è il caso limite. Se per qualche motivo la richiesta API si blocca, per più di 50 secondi, diciamo, avvierò immediatamente una nuova richiesta. Ciò significa che ora 2 richieste sospese, che alla fine si aggiungeranno. C'è un modo per impostare un timeout per la richiesta? So che tutte le richieste portano a Backbone.sync, ma stavo controllando il codice sorgente e non vedo alcun modo fattibile per impostare il timeout per XmlHttpRequest. C'è un modo per farlo in modo pulito e senza sovrascrivere il comportamento? O ci sono altre soluzioni/soluzioni alternative?Backbone.js: definisce il timeout per l'implementazione Backbone.sync

+0

"So che tutte le richieste portano a Backbone.sync" - Penso che il fatto più importante qui è che tutti gli eventi portano a '$ .ajax()'! Risolve molte domande riguardanti le richieste backbone 'fetch()' e 'sync()'. –

risposta

20

Basta passare un'opzione timeout:milliseconds nell'argomento options a fetch. Le opzioni vengono passati direttamente al jQuery.ajax, che gestisce il basso livello delle chiamate XHR:

collection.fetch({timeout:50000}); 

In alternativa è possibile impostare un timeout globale per tutte le richieste effettuate dall'applicazione chiamando jQuery.ajaxSetup in avvio dell'applicazione:

$.ajaxSetup({timeout:50000}); 
+0

Vedo, quindi ci sono altre opzioni che possono essere passate al metodo di sincronizzazione che non sono documentate. btw posso anche passare qualcosa come {complete: functioname}? Nel caso in cui voglio implementare sondaggi lunghi. – ChuckE

+1

È possibile passare qualsiasi opzione desiderata, non esiste alcuna convalida. Backbone ne usa alcuni, ne aggiunge altri e poi lo passa a jQuery.ajax, che è anche documentato. Se lo desideri puoi impostare il gestore completo. – jevakallio