2016-03-20 6 views
0

Ich versuche, eine DELETE-Anfrage auf einen Klick zu senden, aber ich bin nicht sicher, ob meine jQuery eingerichtet ist und trotz Routing, die für die Löschmethode ist, bekomme ich immer noch GET-Anfrage Fehler Cannot GET /app/delete/1. Bin ich mit meiner jQuery auf dem richtigen Weg und wie verhindere ich diese GET-Anfrage?NodeJS - jQuery DELETE-Methode

Route:

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'); 
     }); 
    }); 

-Link:

<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> 

Antwort

5

Das Problem ist, dass, wenn ein Link geklickt wird, es GET verwendet. Wenn auf den Link geklickt wird, passieren zwei Dinge.

  • Das Ereignis click wird ausgelöst, und jQuery sendet die Anforderung DELETE.
  • Der Browser sendet eine GET Anfrage an den gleichen Pfad, da es eine Verknüpfung ist.
  • Um dies zu beheben, setzen Sie die href Eigenschaft des Links auf "javascript:void(0);". Dies macht es so, dass das Klicken auf den Link nichts außer dem ausführt, was in dem Ereignis click angegeben ist. Als Randnotiz würde ich den Pfad der Anfrage von /app/delete/:testId zu /app/:testId ändern. Die Art, wie es jetzt ist, ist überflüssig, wie Sie sagen, DELETE /app/delete/1. Die mehr RESTful Weise, es zu tun ist DELETE /app/1.

    +0

    Hey @voidpigeon, danke für die Antwort. Ihre Antwort hat mit der DELET-Anfrage funktioniert, aber ich bin neugierig, warum meine Weiterleitung nie ausgelöst wird. Sollte ich die Ajax-Methode verwenden? – cphill

    +0

    @cphill Sie sollten die Ajax-Methode verwenden. Der Grund, warum die Umleitung nicht funktioniert, ist, dass sie die Ajax-Anfrage umleitet, nicht die Seite, auf der sich der Browser befindet. Anstatt "redirect" auf dem Server aufzurufen, wird auf dem Client umgeleitet, nachdem eine Antwort vom Server empfangen wurde. – afuous