2013-07-09 103 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

希望它有幫助。