2013-07-09 42 views
1

我有一个负责将用户注册表单发送到我的服务器的emberjs控制器。这在大多数情况下工作正常,但我想利用的承诺,所以我可以做一些错误检查,重定向等Jquery Post的Coffeescript Promise

sendRegistration:() -> 
    $.post('/api/v1/users', 
    user: 
     email: @email, 
     password: @password, 
     password_confirmation: @passwordConfirmation 
    ).then (response) -> 
     alert('Hi!') 

这工作或多或少正确的,作为后得到发送到服务器,并且服务器用适当的状态码进行响应,但是从未执行,可能是因为该帖子的结果被返回。我的咖啡标记有什么缺失吗?

+2

尝试添加一个错误处理程序。其中之一将会被执行。 – Bergi

+0

顺便说一句,你应该为回调添加一个'return response',否则这个方法会返回'undefined'的承诺。 – Bergi

+0

你可以使用http://www.coffeelint.org/检查你的coffeescript合成器或者使用http:///js2coffee.org/将JavaScript转换为coffeescript。 – olamarche

回答

1

只需使用.post回调:

sendRegistration:() -> 
    $.post('/api/v1/users', 
    user: 
     email: @email, 
     password: @password, 
     password_confirmation: @passwordConfirmation 
    , (response) -> 
     alert('Hi!') 
    ); 
+0

同样的结果。响应回来,警报从不触发 – DVG

+0

@DVG然后,jQuery不考虑请求/响应“* success *”。如上所述,添加['failCallback'](http://api.jquery.com/deferred.then/#deferred-then-doneCallbacks-failCallbacks)(参数匹配['error'选项](http:// api.jquery.com/jQuery.ajax/):'function(jqXHR,status,error)')。 –

2

我想利用jQuery的Deferred对象的,你应该定义你更喜欢这个岗位要求:

sendRegistration:() -> 
    $.post('/api/v1/users', 
    user: '', 
    email: @email, 
    password: @password, 
    password_confirmation: @passwordConfirmation 
) 
    .done (response) -> 
    alert('Hi!') 
    .fail (jqHXR, textStatus) -> 
    alert('error') 

的说明从docs

从jQuery 1.5开始,失败和完成,并且,从jQuery 1.6开始,总是回调挂钩重新先入先出管理队列,允许每个钩子有多个回调。见Deferred object methods

希望它有帮助。