【问题标题】:How do I get the error messages in Backbone.js?如何在 Backbone.js 中获取错误消息?
【发布时间】:2013-02-07 22:17:05
【问题描述】:

我有一个关于 Backbone.js 中方法的 success/error 回调的问题。由于我是新手,所以我的问题可能看起来很简单或类似。

据我所知,如果服务器上没有错误(比如异常),模型的save()fetch() 方法会触发success。问题是,我应该在服务器上抛出异常以便在客户端获取错误类型吗?让我举个例子来说明我的意思:

例如,我在网络上有一个 UI,它为应用程序创建了一个新用户。我的客户端看起来像这样:

var userView = Backbone.View.extend({

   initialize:function(){ ... },
   events: {
     'click #sign_up': 'createAccount'
   },
    createAccount: function() { 
      login = $('#login').val();
      password = $('#password').val();
      var user = new User(); // User is a model
      user.save({login: login, password: password},{
            success: function(data) {
               if (data != null) {
                  alert('success');                       
               } else {
                   alert('fail');
               }

            },
            error : function() {
                alert('error');     
            }
   }
});

因此,服务器端将是:

@Controller
@RequestMapping("/users")
public class UsersController {

@RequestMapping(method = RequestMethod.POST)
public @ResponseBody User createUser(@RequestBody User user) throws Exception {


    if (user == null || !user.isValid()) {
        return null;// not valid - error message 1
    }
    if (userDao.getUserByLogin(user.getLogin()) != null) {
        return null;// such user already exists! - error message 2
    }

    userDao.saveUser(user);

    return user;
}

我想要的是能够相应地发送正确的错误消息。如果我返回null,那么success 回调中的data 将是我在发送请求之前刚刚填充的模型。如果我抛出一个异常,那么它将触发error。在这一点上,我应该采取什么方法来满足我的需求。

【问题讨论】:

    标签: javascript java spring backbone.js


    【解决方案1】:

    您不应该抛出异常。好吧,你可以,但你应该在服务器端处理异常,只返回正确的 HTTP 代码。

    例如

    如果在服务器端找不到用户,通常会返回 404 HTTP 状态代码。 404 将触发错误回调。

    错误回调有多个参数,以防您想在服务器上传递一些数据(如错误消息)。根据文档:

    "error" (model, xhr, options) — when a model's save call fails on the server.
    

    您可以访问 xhr 对象中的错误消息。

    【讨论】:

    • 感谢您详细解释的答案。我想问点别的。我知道这可能是题外话,或者我会就此提出另一个新问题。但是因为我认为这与这里有关,所以我决定问。如何从服务器返回响应代码。我在那里找到了一些答案,但无法解决我的问题。我正在使用spring 3.0.6。如果你在那里放一些额外的代码,那将是完美的答案。也请帮助我。
    • 不幸的是,我对春天没有任何经验。你最好添加一个新问题
    猜你喜欢
    • 2015-12-21
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2017-01-25
    • 1970-01-01
    • 2019-10-28
    相关资源
    最近更新 更多