【问题标题】:Backbone save: "success" not getting called骨干保存:“成功”没有被调用
【发布时间】:2014-02-23 17:21:07
【问题描述】:

我正在使用 Backbone 进行我的第一个主要项目。我有一个名为SignUpView 的主干视图,其方法如下:

register: function(){
    this.model.save({
        email: $('#email').val(),
        password: $('#passwd').val()
    },{
        success: function(model, response){
            console.log("Registration succeeded, congrats!");
            window.location.hash = '';
        },
        error: function(model, response){
            console.log("Registration failed, reason = "
                + response.responseText 
                + " (status "+response.status+")");
        }
    });
    return false;
}

但是,每当我运行它时,只会调用 error 回调。这会导致奇怪的行为,例如控制台日志记录

Registration failed, reason = Registration succeeded (status 200)

("注册成功"是注册成功后服务器发回的,否则会显示"Missing parameter 'password'"或者"Invalid email format"之类的。)

我知道我可以简单地在错误块中捕获 200 状态代码,但我不喜欢这样一个事实,即我必须在标记为“错误”的函数中处理成功的帖子。我知道这可能是一件非常简单和愚蠢的事情,但我就是找不到问题所在。

【问题讨论】:

  • 尝试在成功前删除“},{”
  • 因为model.save 需要两个参数:一个包含要更新的字段,一个包含回调。

标签: javascript backbone.js


【解决方案1】:

根据this issue 的说法,问题在于无效的 JSON 也被视为错误。如果服务器返回无效的 JSON(例如Registration succeeded),那么这将在错误处理程序中处理。

我将服务器响应更改为

{"ok":"Registration succeeded"}

一切都开始按预期工作。

【讨论】:

  • 刚注意到这个障碍,同时还向Backbone的方式扔了几个脏话。
猜你喜欢
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
相关资源
最近更新 更多