2016-07-19 10 views
1

<a href="#">がクリックされた場所でjQuery AJAXコマンドを修正しようとしています。DELETEという特定のURLに対するリクエストが発生し、新しいページにリダイレクトされます。私のAJAXのDELETE部分は正常に動作していますが、何らかの理由で成功部分が/appへのリダイレクトをDELETEリクエストとして解釈しています。 URLの前に設定したGETを認識していないようで、デフォルトはDELETEです。私の方法のどの部分が間違っているかを誰かが助けてくれますか?AJAX DELETEメソッドリダイレクトが機能しない

リンク:

<a href="javascript:void(0);" id="card-delete-link"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span>DELETE</a> 

のjQuery:

<script type="text/javascript"> 
     $(document).ready(function() { 
      $('#card-delete-link').click(function(){ 
       $.ajax({ 
        method: 'DELETE', 
        url: '/app/edit/{{card.cardId}}', 
        success: function(){ 
         console.log('Annotation ID: ' + '{{card.cardId}}' + ' was deleted'); 
         $.ajax({ 
          method: 'GET', 
          url:'/app' 
         }); 
        } 
       }); 
      }); 
</script> 

ブラウザコンソール:

jquery.js:8630 DELETE http://localhost:3000/app 404 (Not Found) 

ルート:

appRoutes.route('/edit/:cardId') 
    .delete(function(req, res){ 
     models.Card.destroy({ 
      where: { 
       userId: req.user.userId, 
       cardId: req.params.cardId   
      } 
     }).then(function(){ 
      res.redirect('/app'); 
     }); 
    }); 
+0

両方の呼び出しに 'error:'ハンドラを追加してみてください。 – WhiteHat

答えて

0

node.jsでは.delete動詞を使用しています。つまり、ヘッダーに指定されたDELETEメソッドを持つリクエスト以外のすべてのリクエストを無視します。これがあなたのGET要求が処理されない理由です。これにより、サーバに2度目のリクエストをせずに、のwindow.location.replace()で簡単に成功へリダイレクトできます。一方、第2の要求を行う場合は非常に重要です、ちょうど新しいルート

例作成:あなたはAJAXでリダイレクトすることができなくなりますので、

app.get('/', function (req, res) { 
    res.send('GET request to the homepage'); 
}); 

また、あなたは、あなたのコードを再考すべきであるが要求。

+0

答えをありがとう、非常に洞察力があった。私はあなたが言っていることを理解していますが、Ajaxリクエストの外で何をお勧めしますか?私は '.delete'がデータベースレコードを削除するベストプラクティスだと思っていますが、問題は、HTML要素を使ってajaxを使わずにそのメソッドを起動する方法を理解できないということです。これが達成されると、私のルート上のリダイレクトがうまくいくような気がします。助言がありますか? – cphill

+0

成功の内部:function.lplace.replace( '/ app')を書くだけで、console.log()の後に$ {.ajax}の代わりにfunction(){} –

関連する問題