2016-03-20 4 views
0

ボタンクリックでDELETEリクエストを送信しようとしていますが、jQueryが設定されていて、deleteメソッドのルーティングを使用しているにもかかわらず、GETリクエストエラーCannot GET /app/delete/1。私はjQueryを正しく実装していますか?このGETリクエストをどうやって防ぐのですか?NodeJS - jQuery DELETEメソッド

ルート:

appRoutes.route('app/delete/:testId') 

    .delete(function(req, res){ 
     models.Test.destroy({ 
      where: { 
       userId: req.user.user_id, 
       testId: req.params.testId   
      } 
     }).then(function(){ 
      res.redirect('/app'); 
     }); 
    }); 

リンク:

<a href="/app/delete/{{test.testId}}" id="test-delete-link">Delete</a> 

のjQuery:

<script type="text/javascript"> 
     $(document).ready(function() { 
      $('#test-delete-link').click(function(){ 
       $.ajax({ 
        type: 'DELETE', 
        url: '/app/delete/{{test.testId}}' 
       }); 
      }); 
     }); 
    </script> 

答えて

5

問題は、リンクがクリックされたときに、それはGETを使用していることです。あなたのリンクがクリックされると、2つのことが起こっています。

  • clickイベントがトリガーされ、jQueryがDELETEリクエストを送信します。
  • ブラウザはリンクであるため、GET要求を同じパスに送信します。

これを修正するには、リンクのhrefプロパティを"javascript:void(0);"に設定します。これにより、リンクをクリックすると、clickイベントで指定されているものを除いて何も行われなくなります。

補足として、私は/app/delete/:testIdから/app/:testIdへのリクエストのパスを変更します。 DELETE /app/delete/1と言っているように、今のところは冗長です。それを行うためのよりRESTfulな方法はDELETE /app/1です。

+0

こんにちは@voidpigeon、応答のおかげで。あなたの答えはDELETリクエストを作成するのに役立ちましたが、私のリダイレクトが決して引き起こされない理由が不思議です。私はajaxメソッドを使うべきですか? – cphill

+0

@cphill ajaxメソッドを使用する必要があります。リダイレクトが機能しない理由は、ブラウザが表示しているページではなく、ajaxリクエストをリダイレクトしているからです。サーバ上で 'redirect'を呼び出すのではなく、サーバからの応答を得た後にクライアントにリダイレクトします。 – afuous

関連する問題