2013-02-22 1 views
4

Backbone.js에서 메서드의 success/error 콜백에 관한 질문이 있습니다. 제가이 말을 처음 접했을 때, 제 질문은 단순하거나 비슷한 것처럼 보일 수 있습니다. 서버에 아무런 오류 (예를 들어, 예외)이있는 경우Backbone.js에서 오류 메시지를 얻으려면 어떻게해야합니까?

는 지금까지 내가 아는 한, 모델의 save() 또는 fetch() 방법은 success을 발생합니다. 문제는 클라이언트 측에서 오류 유형을 얻으려면 서버에서 예외를 throw해야합니까? 내가 의미하는 바를 예를 들어 설명해 드리겠습니다.

예를 들어 앱용 새 사용자를 만드는 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 콜백이 요청을 보내기 전에 채워진 모델이됩니다. 예외가 발생하면 error이 발생합니다. 이 시점에서, 내 요구를 충족시키기 위해 어떤 접근 방식을 취해야합니까?

답변

4

예외를 throw해서는 안됩니다. 그럼 당신은 할 수 있지만 다음 서버 쪽에서 예외를 처리하고 올바른 HTTP 코드를 반환해야합니다.

사용자가 서버 측에서 발견되지 않으면 일반적으로 404 HTTP 상태 코드를 반환합니다. 404 오류 콜백을 시작합니다.

서버에 오류 메시지와 같은 일부 데이터를 전달하려는 경우 오류 콜백에 여러 인수가 있습니다. 문서에 따라 :

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

xhr 개체의 오류 메시지에 액세스 할 수 있습니다.

+0

잘 설명 된 답변에 감사드립니다. 나는 다른 것을 요구하고 싶다. 나는 그것이 화제가 될 수 있다는 것을 알고있다. 또는 나는 그것에 대해 또 다른 새로운 질문을 할 것이다. 그러나 여기서 그것이 적절하다고 생각했기 때문에 나는 물었다. 서버에서 응답 코드를 반환하려면 어떻게해야합니까? 나는 거기서 어떤 대답을 찾았지만 나의 prob를 해결할 수는 없었다. 나는 봄 3.0.6과 함께 일하고있다. 거기에 몇 가지 추가 코드를 넣으면 완벽한 대답이 될 것입니다. 저 또한 저를 도우십시오. – boburShox

+0

불행히도 저는 봄에 대한 경험이 없습니다. 새로운 질문을 추가하는 것이 더 나을 것이다. – neebz

관련 문제