首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使在成功的情况下,Backbone.js保存也总是会触发错误。

即使在成功的情况下,Backbone.js保存也总是会触发错误。
EN

Stack Overflow用户
提问于 2014-03-11 01:37:18
回答 3查看 1K关注 0票数 2

我读过关于这个问题的其他几篇文章,似乎没有一个解决方案对我有帮助。我的视图中有以下代码:

代码语言:javascript
复制
  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();
    } 
  });

在我的服务器控制器(运行快递3的nodejs)上:

代码语言:javascript
复制
UserController.prototype.updateAction = function(req, res) {
if (req.route.method != "put") {                              
    res.send({status: "error", error: "update must be put action and must include values"});
    return false;                                             
}
var query = {'user_id': req.params.id};                       
var user = req.body;
var userRepository = this.userRepository                      

// delete _id to 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 back
    util.log('updated user ' + user.user_id);
    res.setHeader('Content-Type', 'application/json');
    res.status(200);
    res.send(JSON.stringify({"status": "success", "updated": updated}));
});

}

在保存时,我的模型被正确地保存在服务器中,并且我已经用验证了服务器响应。因此,据我所知,服务器正在返回状态200,有效的JSON,带有一个有效的JSON响应头。然而,我的主干model.save函数总是触发错误回调。有人能告诉我为什么和如何解决这个问题吗?

如果将dataType设置为如下所示的文本,我就能够让它工作:

代码语言:javascript
复制
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();
    }
  });

但是这样做不允许我从服务器获得响应。相反,我在响应var中得到了这样的信息:

代码语言:javascript
复制
success: {
  "_id": "5133b02062e15ed1d2000001",
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-11 02:42:37

主干希望返回它在PUT或POST请求体中发送的模型。

而不是:

代码语言:javascript
复制
res.send(JSON.stringify({"status": "success", "updated": updated}));

在服务器的响应中尝试这样做:

代码语言:javascript
复制
res.json(user);
票数 2
EN

Stack Overflow用户

发布于 2014-03-11 05:31:18

可能有一种可能性,您的呼叫可能已经建立了状态200连接,其中主干网检测为错误,只有在呼叫为200确定时,主干才会成功。

票数 0
EN

Stack Overflow用户

发布于 2014-03-11 06:05:07

你的服务器代码是什么?您需要确保将json送回脊梁,如下所示:

代码语言:javascript
复制
//In your express POST route
user.save(function(err) {
    if(err){
        console.log(err);
        return res.json(401);
    } else {
        console.log('user: ' +user.username + ' saved');
        return res.json(200);
    }

然后,在主干视图中,您可以检查响应并执行所需的操作:

代码语言:javascript
复制
//some function in your view
this.model.save(this.formValues, {
            success: function(model, response, options) {
                if (response == 200) { 
                    console.log('success :' + response);
                    //Do stuff
                } else {
                    console.log('error: '+response);
                //etc.

还请注意,根据主干模型文档:“保存在选项散列中接受成功和错误回调,将传递参数(模型、响应、选项)”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22314788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档