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オブジェクトでデータを取得しています...?

クロムツールからのネットワークのスクリーンショットは次のとおりです。

ここに画像の説明を入力

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 に答える