2016-03-20 47 views
0

我想發送一個按鈕單擊DELETE請求,但我不知道如果我的jQuery設置,儘管使用路由是刪除方法,我仍然獲取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。點擊鏈接時,會發生兩件事情。

  • click事件被觸發,jQuery發送DELETE請求。
  • 瀏覽器發送GET請求到相同的路徑,因爲它是一個鏈接。

要解決此問題,請將鏈接的href屬性設置爲"javascript:void(0);"。這使得點擊鏈接除了在click事件中指定的內容之外什麼也不做。

作爲一個附註,我會將請求的路徑從/app/delete/:testId更改爲/app/:testId。現在的方式是多餘的,正如你所說的DELETE /app/delete/1。更可靠的方法是DELETE /app/1

+0

嘿@voidpigeon,謝謝你的迴應。您的答案與DELET請求一起工作,但我很好奇爲什麼我的重定向從未觸發。我應該使用ajax方法嗎? – cphill

+0

@cphill你應該使用ajax方法。重定向不起作用的原因是重定向ajax請求,而不是瀏覽器所在的頁面。不要在服務器上調用'redirect',而是在從服務器獲得響應後重定向客戶端。 – afuous