Ember 1.0.0中的承诺-成功回调未启动



这让我抓狂。我有一个promise,它调用JSON端点来为用户进行身份验证。我可以在控制台中看到,这个调用现在正在访问服务器并返回200 OK——为了我的理智,我还跟踪了服务器日志,它也返回了200状态,所以我知道请求正在到达那里。

然而,当涉及到处理响应时,我的fail()回调每次都会触发并更新handlebas模板,即使表面上(根据服务器)承诺成功了。如果我输入了错误的密码,服务器会返回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);

导致CCD_ 8着火;我知道它们与原作相似,但这表明undefined就是承诺的回报。我现在要重新检查服务器负载。

编辑2:

我怀疑这个问题描述的是一个类似的问题。返回JSON数据的控制器挂钩如下:

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

编辑3:

响应小组中的FireFox网络检查员说SyntaxError: JSON.parse: unexpected end of data

好吧,问题出在CORS上。使用这个gem和下面的代码,我们能够成功地检索响应主体。它在浏览器级别被阻止,这可能是JSON.parse错误的原因,因为有一个空的响应体。

application.rb:中

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

最新更新