Backbone.js save always triggers error even on success -
i've read several of other posts problem , none of solutions seem working me. have following code in view:
this.model.set({ username: $('#user-username').val(), role: $('#user-role').val(), description: $('#user-description').val() }); this.model.save({ user_id: this.model.get('user_id')}, { success: function(user, response) { console.log('success:', response); $('.flash-message').text("success").show(); }, error: function(user, response) { console.log('error:', response); $('.flash-message').text(response.error).show(); } }); and on server controller (nodejs running express 3):
usercontroller.prototype.updateaction = function(req, res) { if (req.route.method != "put") { res.send({status: "error", error: "update must put action , must include values"}); return false; } var query = {'user_id': req.params.id}; var user = req.body; var userrepository = this.userrepository // delete _id avoid errors delete user._id; userrepository.update(query, user, {}, function(err, updated) { if ((err) || (!updated)) { res.send({"status": "error", "error": err}); return false; } // send updated user util.log('updated user ' + user.user_id); res.setheader('content-type', 'application/json'); res.status(200); res.send(json.stringify({"status": "success", "updated": updated})); }); }
on save, model saved correctly in server , have verified server response this. so, far can tell server returning status 200, valid json, valid json response header. , yet backbone model.save function triggers error callback. can please tell me why , how resolve this?
i able work if set datatype text so:
this.model.save({ user_id: this.model.get('user_id')}, { datatype: "text", success: function(user, response) { console.log('success:', response); $('.flash-message').text("success").show(); }, error: function(user, response) { console.log('error:', response); $('.flash-message').text(response.error).show(); } }); but doing not allow me response server. instead in response var:
success: { "_id": "5133b02062e15ed1d2000001", }
backbone expects model sent in put or post request body.
instead of:
res.send(json.stringify({"status": "success", "updated": updated})); try in server's response:
res.json(user);
Comments
Post a Comment