2014-01-08 2 views
0

이것은 나를 미치게했습니다. 사용자 인증을 위해 JSON 끝점을 호출하는 약속이 있습니다. 콘솔에서이 호출이 이제 서버를 때리고 200 OK을 반환하는 것을 볼 수 있습니다. 서버 로그를 꼬집어서 200 상태를 반환하기 때문에 요청이 수신 중임을 알 수 있습니다.Ember 1.0.0에서 약속 - 성공 콜백이 실행되지 않음

그러나 응답을 처리 할 때마다 내 fail() 콜백이 매번 실행되고 핸들 바 템플릿을 업데이트합니다. 이는 서버에 따라 표면 상으로는 약속이 성공하더라도 마찬가지입니다. 잘못된 암호를 입력하면 서버가 401을 반환합니다. 따라서 200은 예상되는 동작입니다.

다음은 Ember 컨트롤러입니다. 이는 폼에서 발생하는 save 액션을 처리합니다.

Malinko.SessionsEditController = Ember.ObjectController.extend({ 
    actions: {  
    save: function() { 
     var self = this; 
     this.set('errorMessage', null); 

     var data = { 
     email: this.get('email'), 
     password: this.get('password'), 
     api: 'true' 
     }; 

     function done(response){ 
     console.log('Success, ' + JSON.stringify(response)); 
     self.transitionToRoute('index'); 
     }; 

     function fail(reason){ 
     console.log('Failed, ' + JSON.stringify(reason)); 
     self.set('errorMessage', JSON.stringify(reason)); 
     }; 

     var authenticate = Ember.$.post('https://example.com/users/sign_in.json', data); 

     authenticate.then(done, fail); 
    } 
    } 
}); 

무엇이 여기에 있습니까? 나는 Ember에게 매우 익숙하므로 뭔가 간단 할 수 있습니다. 또한 관련성이있는 경우 Yeoman Ember 패키지를 사용하여 앱을 빌드 했으므로 1.3.0 버전이 아닌 1.0.0 버전을 사용합니다.

"DEBUG: Ember.VERSION : 1.0.0" 
"DEBUG: Handlebars.VERSION : 1.0.0" 
"DEBUG: jQuery.VERSION : 2.0.3" 

편집 : 나는에 authenticate 약속 라인을 변경하는 경우

그래서 :

authenticate.then(done).then(undefined, fail); 

가 발생하면서,

authenticate.then(done); 

아무런 변화가 없습니다 fail이 발사; 나는 그것들이 원본과 유사하다는 것을 알고 있지만, 그것은 undefined이 약속이 되돌려지고 있음을 암시합니다. 지금 서버 페이로드를 다시 점검 할 것입니다.

편집 2 :

나는 this question이 비슷한 문제를 설명하는 것으로 의심. 다음과 같이 JSON 데이터를 반환 제어기 후크이다

@key = {key: user.key} 
logger.debug @key.to_json 
render :json => @key 

EDIT 3

응답 패널의 파이어 폭스 네트워크 관리자가 SyntaxError: JSON.parse: unexpected end of data 말한다.

답변

0

좋아요, 문제는 CORS와 관련이있는 것으로 나타났습니다. this gem 및 아래 코드를 사용하여 응답 본문을 성공적으로 가져올 수있었습니다. 브라우저 수준에서 차단되었는데, 아마도 빈 응답 본체가 있었기 때문에 JSON.parse 오류를 고려했을 것입니다. application.rb에서

:

config.middleware.use Rack::Cors do 
    allow do 
    origins '*' 
    resource '*', :headers => :any, :methods => [:get, :post, :options] 
    end 
end 
관련 문제