2016-07-19 38 views
1

我想修復我的jQuery AJAX命令,其中有一個點擊<a href="#">觸發DELETE請求特定的URL,我有一個路由設置,然後重定向到一個新的頁面。我的AJAX的DELETE部分工作正常,但由於某種原因,成功部分將我的重定向解釋爲/app作爲DELETE請求。它似乎沒有識別我在URL之前設置的GET,並且默認爲DELETE。任何人都可以幫助我確定我的方法的哪一部分不正確?AJAX刪除方法重定向不工作

鏈接:

<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請求沒有被處理。因此,您可以在不向服務器發出第二次請求的情況下,輕鬆地重定向到window.location.replace()。在另一方面,如果使第二個請求是關鍵,只需要創建一個新的路線

例子:

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

此外,你應該重新考慮你的代碼,因爲你將無法使用Ajax來重定向請求。

+0

謝謝你的回答,這非常有見地。我明白你在說什麼,但是你會在ajax請求之外推薦什麼?我覺得'.delete'是刪除數據庫記錄的最佳實踐,但問題是我無法弄清楚如何使用HTML元素來觸發沒有Ajax的方法。我覺得一旦實現了這一點,那麼我的路線上的重定向將起作用。有什麼建議麼? – cphill

+0

成功內部:function(){},在console.log()之後,而不是$ .ajax只需寫入window.location.replace('/ app') –