2013-07-26 12 views
8

Il seguente codice backbone collection.fetch si attiva, gli errori per qualche motivo e poi salta al gestore degli errori (come previsto), ma non so davvero quali siano i parametri del gestore degli errori. I parametri model, xhr e options non sono definiti quando si verifica un errore. Che cosa sto facendo di sbagliato?backbonejs collection.fetch handler di errori

var onErrorHandler = function(model, xhr, options) { 
     alert(options); 
    }; 

    that.collection = new MembersCollection([]); 
    that.collection.fetch({ success : onDataHandler, error: onErrorHandler, dataType: "jsonp" }); 

@muistooshort: Ho completamente dimenticato gli argomenti di js, grazie per il suggerimento.

Ecco cosa ho trovato ...

Arguments[0] = looks like its just the letter "d" 
Arguments[1] = is an object. Has readyState, responseText, status, statusText 
Arguments[2] = is an object. Exactly the same as [1] 

Lo status = 200 e il testo è "OK". Il responseText è l'esatto dato JSON che mi aspettavo di ricevere dal modello di server PHP.

Quindi immagino ora la domanda è: perché il metodo collection.fetch invia il risultato positivo al gestore degli errori? Non credo che la sequenza di questi gestori nei richiami di recupero sia importante. Lo fa?

+2

Sei sicuro che sono tutti "indefiniti"? Puoi sempre 'console.log (argomenti)' per vedere cosa esattamente viene passato. –

+0

mancano alcune delle opzioni ajax richieste per una richiesta jsonp. http://stackoverflow.com/questions/7202603/jquery-ajax-jsonp –

+0

@muistooshort: Ho completamente dimenticato gli argomenti di js, grazie per il suggerimento. Ecco cosa ho trovato ... – Locohost

risposta

15

Ok ho trovato la firma params per i callback di recupero e i gestori di successo/errore. Ora che quelli sono impostati correttamente, il recupero funziona come previsto. Questo codice funziona ...

var onDataHandler = function(collection, response, options) { 
     console.log('membersview fetch onedatahandler'); 
     that.render(); 
    }; 

    var onErrorHandler = function(collection, response, options) { 
     console.log('membersview fetch onerrorhandler'); 
     alert(response.responseText); 
    }; 

    that.collection = new MembersCollection([]); 
    that.collection.fetch({ success : onDataHandler, error: onErrorHandler }); 

Grazie ragazzi per le vostre risposte. Ho molto bisogno/apprezzo il tuo consiglio :-)