jQuery .done()和.always()永远不会被调用

时间:2013-07-12 06:14:29

标签: javascript api jquery coffeescript

我正在尝试进行简单的ajax api调用,但即使在成功调用之后,我的jQuery .done().always()回调也永远不会运行。

这是我打电话的地方:

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: 'test@email.com' } // 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'
)

编辑2

我刚刚意识到POST实际上是“失败”,但是在4.1分钟之后......但奇怪的是我仍然在req.body对象中获取数据......?< / p>

以下是Chrome工具的网络截图:

enter image description here

2 个答案:

答案 0 :(得分:1)

看起来您在服务器上收到了请求(并记录了它),但之后却没有做任何事情。这最终导致超时。将其更改为

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

也许你在res对象上使用了一些带有特殊方法的框架;如果是这样,那么查看有关如何回答请求的文档。

答案 1 :(得分:0)

试试这样:

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