3

我正在尝试做一个简单的 ajax api 调用,但我的 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: '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 对象中获取数据......?

这是来自 chrome 工具的网络截图:

在此处输入图像描述

4

2 回答 2

1

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

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

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

于 2013-07-14T20:13:19.270 回答
0

试试这样:

$.ajax({
      type: 'POST'
      url: '/api/email'
      data: { email: email}
    }).done((msg) ->
      console.log 'POST success'
      console.log msg
    ).always((msg) ->
      console.log 'Always'
    )
于 2013-07-12T06:24:29.393 回答