2013-07-12 30 views
3

我試圖做一個簡單的ajax api調用,但我的jQuery .done().always()回調永遠不會運行,即使在調用成功後。jQuery的.done()和.always()永遠不會被調用

這裏就是我做的API調用:

join: (e) -> 

    e.preventDefault() 
    email = $('.email').val() 

    $.ajax(
     type: 'POST' 
     url: '/api/email' 
     data: { email: email } 
    ).done((msg) -> 
     console.log 'POST success' 
     console.log msg 
    ).always((msg) -> 
     console.log 'Always' 
    ) 

下面是從我控制器post

app.post '/api/email', (req, res) -> 

    console.log req.body 

,我的服務器被正確地從API調用接收數據的問題,但我jQuery回調從未被解僱。

{ email: '[email protected]' } // What gets logged server-side 

編輯

所以我嘗試添加一個.fail()方法和交換了一下代碼,看看我的語法是錯誤的,但是這個新的代碼仍然如舊代碼工作。

request = $.ajax(
    type: 'POST' 
    url: '/api/email/beta' 
    data: { email: email } 
) 

request.done((msg) -> 
    console.log 'POST success' 
    console.log msg 
) 

request.fail((msg) -> 
    console.log 'POST Fail' 
    console.log msg 
) 

request.always(() -> 
    console.log 'Always' 
) 

EDIT 2

我剛剛意識到POST實際上是「失敗」,但經過4.1分鐘......但奇怪的是,我仍然在REQ獲取數據.body對象...?

這裏的網絡由鉻工具的截圖:

enter image description here

+0

你是否試圖抓住「失敗」? – alexmngn

+0

什麼是響應狀態還有控制檯 –

+0

@tilix中的任何錯誤,請看編輯 –

回答

1

看起來你收到的服務器的請求(和日誌),但隨後不要對此做任何事情。這最終導致超時。將其更改爲

app.post '/api/email', (req, res) -> 
    console.log req.body 
    res.write(JSON.stringify({success:true})/* or whatever*/); 
    res.end(); 

也許你正在使用與res對象的特殊方法的一些框架;如果是這樣的話,請查閱其關於如何回答請求的文檔。

+0

這是做到了。我使用快遞,不知道我必須明確結束請求。雖然謝謝! –

+1

啊,然後只是['res.send'](http://expressjs.com/api.html#res.send)應該這樣做; afaik不需要在那裏結束。 – Bergi

0

嘗試這樣的:

$.ajax({ 
     type: 'POST' 
     url: '/api/email' 
     data: { email: email} 
    }).done((msg) -> 
     console.log 'POST success' 
     console.log msg 
    ).always((msg) -> 
     console.log 'Always' 
    ) 
+1

大括號在coffeescript中是可選的,但我確實這樣做了,代碼仍然表現相同。 –

相關問題