4

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

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

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

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;
}

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

4

1 回答 1

4

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

例如

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

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

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

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

于 2013-02-22T10:23:55.410 回答