2013-04-19 9 views
5

Piszę aplikację node.js i jestem nieco zaniepokojony tym, jak buduję dane postów, które można wysłać na serwer. Na przykład, kiedy chcę, aby usunąć element danych, kładę identyfikator wspomnianego elementu w atrybucie href:Przechowywanie danych dla żądania POST w href - złe praktyki?

<a class='delete' href="1231">Delete this data</a> 
<!-- href is based on a variable I'm pulling from the server --> 

Kiedy linkujące kliknięciu zapobiec akcje domyślne, a następnie uruchomić ajax request:

//On click + ajax 
body.on('click', '.delete', function(e){ 
e.preventDefault(); 
    $.ajax({ 
     type: 'POST', 
     url: '/admin/report/detail/delete', 
    data: {id: $(this).attr('href')}, 
    success: function(){ 
     //Success message 
    }, 
    error: function(){ 
     //Error message 
    } 
}); 
}); 

Zastanawiam się, czy nie jest tak źle używać atrybutu href w ten sposób? Jeśli tak, jaki jest najlepszy sposób przechowywania tych danych?

Odpowiedz

9

Zamiast tego użyj atrybutów danych. Przechowywanie ich w href nie jest semantyczne, a co jeśli chcesz czasami przechowywać identyfikatory, a inne dane w innym czasie? Możesz utworzyć dowolną liczbę atrybutów danych, nadając im nazwy semantyczne.

<a class="delete" data-id="1231" href="#"> 

Następnie w javascript:

... 
data: { id: $(this).data('id') } 
... 

LUB

data: { id: $(this).attr('data-id') } 
+0

Dzięki, właśnie o tym myślałem. Czy mój href powinien być prostym "#"? –

+0

Tak, hasz jest najczęstszym hrefem dla anchorów ajaxowych. Zawsze używam '#'. Możesz również użyć 'javascript:;', ale to zanieczyści twój html i jest niepotrzebne. –

2

Szczerze mówiąc, jesteś zawsze będzie musiał wysłać identyfikator rekordu mają zostać usunięte do serwer jednak to robisz. Nawet jeśli robisz atrybuty danych, to nie jest problem tutaj, to wysyłasz dane "przez przewód" przez AJAX, aby ludzie mogli zobaczyć identyfikator.

Musisz pomyśleć - ok, ten identyfikator może zostać zmieniony, jakkolwiek bystry jesteś z nim, ludzie znajdą sposób, aby go zmienić i potencjalnie usunąć różne identyfikatory klientów ... więc ... zawsze upewnij się, że przeprowadzasz odpowiednie testy bezpieczeństwa strona serwera czyli czy aktualnie zalogowany użytkownik może usunąć ID użytkownika, który jest wysyłany?

+0

+1 za to, moja odpowiedź dotyczy semantyki, ale jeśli są pytania dotyczące bezpieczeństwa, ta odpowiedź jest na miejscu. –

+0

i +1 dla ciebie, zrozumiałeś pytanie bardziej niż ja, wziąłem to w kontekście bezpieczeństwa. –

+1

Tak, mam uwierzytelnianie na miejscu po stronie serwera. Właściwie, konwertuję wszystkie te żądania usunięcia do POST z GET (nie pytaj mnie, co myślałem, kiedy po raz pierwszy napisałem kod). –

Powiązane problemy