Ciao ninja Backbone,Backbone anche dopo codice di risposta 200
Questa è la mia prima volta con Backbone - quindi per favore scusa la mia ness "niubbo". Nella mia funzionalità (parte di un'app più grande), ho un Backbone View vA, supportato da un modello mA (come dovrebbe essere) e il lato server è in Spring MVC che ha annotato i metodi del controller Spring con @RequestBody e @ResponseBody. Jackson lavora perfettamente con Spring.
Ora, in app,
Backbone.Model
|_ BaseModel (custom base model for our app)
|_ mA (my model)
mA ha il proprio endpoint e Backbone chiama con successo che quando si effettua una richiesta PUT per esempio, quando chiamo save() da un gestore di eventi pulsante di invio da View vA in questo modo:
this.model.save ({
success : function(){
alert('Request submitted successfully');
},
error : function(){
alert('Something awful happened.');
}
});
nostro BaseModel ha il seguente: metodo di controllo
define([], function() {
window.BaseModel = Backbone.Model.extend({
......
});
onSyncError : function(model, response) {
switch (response.status) {
case 403:
[...//some more code ]
default:
alert(bundle.getDefault('HTTP_RESP_OTH') + response.status);
}
},
onSyncSuccess : function(model, response) {
alert('Sync done! ');
},
sync : function(method, model, options) {
options.error = this.onSyncError;
Backbone.sync.call(this, method, model, options);
....//some more stuff.
},
}
Primavera:
@RequestMapping(value="/resource/xyz/{id}.json", method = RequestMethod.PUT, consumes = {"application/json"}
, produces = {"application/json"})
@ResponseBody
public Map<String,String> methodX(@RequestBody XyzDTO xyzDTO){
....
map.put("msg", "success");
return map;
}
Inoltre, proprio prima di fare il risparmio chiamare, ho modificare gli attributi di un paio modello, dal momento che il DTO lato server ha una struttura diversa come questa:
this.model.unset("abc",{ silent: true });
this.model.set({ abc: {id : "2",xyz:{ ... //more code });
Il problema è, chiamare save() genera un PUT richiede e chiama con successo il gestore di endpoint Spring, ma ottengo un codice di risposta 200 (che è quello che mi aspetto), ma quando rintraccio la chiamata con Firebug, entra nel metodo onSyncError e mi dà un messaggio di errore (a causa della caso "predefinito" in esso).
Il documento Backbone dice: "Quando si restituisce una risposta JSON, inviare gli attributi del modello che sono stati modificati dal server e devono essere aggiornati sul client". Bene, non ho bisogno di aggiornare il modello sul lato client, è uno degli ultimi schermi e devo solo dire all'utente di un successo/errore e reindirizzare a una pagina principale/dashboard.
Ho letto un po 'di più, e sembra che il codice 200 come risposta non è sufficiente - potrebbero esserci errori di analisi JSON che causano il fallimento della sincronizzazione.
Ho controllato la risposta in Firebug, e la risposta JSON assomiglia a "" msg ":" Success "}.
Quindi, cosa potrebbe andare storto?
io non sono sicuro se questo potrebbe causare il problema, ma non ho avuto problemi prima con il fatto che 'Backbone .Model.save() 'richiede effettivamente di mettere i tuoi dati di salvataggio come primo argomento, in questo modo:' model.save (model.toJSON(), {success: function() {}, error: function() {}); Mi sono imbattuto in problemi con questo in passato, dove ho avuto strani errori solo perché ho dimenticato che devi passare esplicitamente i dati che desideri salvare/pubblicare. Potrebbe fare un tentativo. – brettjonesdev
Grazie per il tuo tempo. Ma non ha aiutato. Ora, ottengo questo in Firebug quando ritorna la risposta: TypeError: a is undefined ... funzione bi (a, b, d) {var e = b.dir, f = d && b.dir === "parentNode", g = u ++; ... – trishulpani