这让我很生气。我有一个承诺,调用JSON端点为用户进行身份验证。我能够在控制台中看到此调用现在正在命中服务器并返回200 OK
- 为了我的理智,我还对服务器日志进行了调整,它也返回200
状态,所以我知道要求到达那里。
然而,当涉及到处理响应时,我的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.0.0,而不是1.3.0当前的稳定版本。
"DEBUG: Ember.VERSION : 1.0.0"
"DEBUG: Handlebars.VERSION : 1.0.0"
"DEBUG: jQuery.VERSION : 2.0.3"
编辑:
因此,如果我将authenticate
承诺行更改为:
authenticate.then(done);
没有任何事情发生,而
authenticate.then(done).then(undefined, fail);
导致fail
开火;我知道它们与原作类似,但它暗示undefined
是承诺的回报。我现在要重新检查服务器有效负载。
编辑2:
我怀疑this question正在描述类似的问题。返回JSON数据的控制器钩子如下:
@key = {key: user.key}
logger.debug @key.to_json
render :json => @key
编辑3:
响应小组中的FireFox网络检查员说SyntaxError: JSON.parse: unexpected end of data
。
答案 0 :(得分: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