2013-02-26 18 views
6

Mam pytanie dotyczące najlepszych praktyk podczas korzystania z jQuery/JavaScript/Ajax. Powiedzmy, że mam pewne zadania i istnieje kalendarz dla każdego zadania. Użytkownik może kliknąć dzień w kalendarzu zadań i zarezerwować zadanie w danym dniu za pośrednictwem AJAX. Muszę zapisać datę i identyfikator zadania gdzieś i używam naprawdę dziwaczne identyfikatory dla że takie jak:Najlepsza praktyka z połączeniami jQuery i AJAX

<span class="day_field" id="date_13-02-2013_task_4">13.02.2013</span> 

potem po prostu dołączyć słuchacza tak:

$('.day_field').on('click',function(){ 
    var date = $(this).id.split('_')[1]; 
    var task_id = $(this).id.split('_')[3]; 
    //place for some validation 
    $.post('book_task.php',{task_id: task_id, date: date},function(data){ 
     //something cool with the result 
    }); 
}); 

Moje pytanie jest: Czy to jest właściwa droga, jak to zrobić? Nie jestem całkiem pewny, ponieważ identyfikatory mogą być naprawdę długie + zawierają identyfikator w bazie danych, który prawdopodobnie nie jest wcale zapisany.

Dzięki! T.

Odpowiedz

8

użycie HTML5 dane atrybuty:

<span class="day_field" data-date="13-02-2013" data-task="4">13.02.2013</span> 

$('.day_field').on('click',function(){ 
    var date = $(this).data("date"); 
    var task_id = $(this).data("task"); 
    //place for some validation 
    $.post('book_task.php',{task_id: task_id, date: date},function(data){ 
     //something cool with the result 
    }); 
}); 
+1

+1 Pamiętaj, że nawet jeśli jest oznaczona jako funkcja html5, będzie działać ze starymi przeglądarkami. – Mahn

+0

Wydaje się to idealne. Muszę to najpierw wypróbować w firmie, w której pracuję, ponieważ niektórzy użytkownicy używają tylko IE8 i muszę się upewnić, że działa poprawnie. Proszę, powiedz mi: czy to w porządku, że identyfikator zadania jest tam widoczny i każdy może go zobaczyć w kodzie?Jestem pewien, że każdy haker będzie wiedział, co oznacza ta liczba. Pytanie brzmi, czy może go użyć, by zrobić coś złego, czy nie. Dzięki! – user1377911

+0

Starsze przeglądarki traktują je jako niestandardowe atrybuty, które po prostu ignorują. Wszystko, co zrobił HTML5, to rezerwowanie nazw zaczynających się od 'data-'na aplikacje, dzięki czemu możesz mieć pewność, że nigdy nie będą one w konflikcie ze standardowymi atrybutami. Nie jestem pewien, czym jest obawa hakerów - atrybut daty odpowiada dacie kalendarza, nie ma w tym nic tajemniczego. – Barmar

2

Właściwy sposób Lepszym sposobem na to byłoby do przechowywania danych zarówno w atrybutach danych, lub dokonać rozpiętości znacznik zakotwiczenia i przechowywać ciąg param pożądany w atrybucie href.

<span class="day_field" data-date="13-02-2013" data-task="4>13.02.2013</span> 

or 

<a class="day-field" href="?task_id=4&date=13-02-2013">13.02.2013</a> 

z tego dla tagu kotwicy:

$('.day_field').on('click',function(e){ 
    e.preventDefault(); 
    $.post("foo.php",this.href,handler); 
}); 
+0

Dodałabym również atrybuty danych do kotwicy. – Phil

+0

var date = $ (this) .prop ("data-date"); var task_id = $ (this) .prop ("data-task"); dostęp do wartości – iAmClownShoe

+0

@iAmClownShoe data-task jest atrybutem, a nie właściwością. Ten kod był już objęty inną odpowiedzią, nie widzę potrzeby jej powtarzania. –

0

Odsłanianie rzeczywisty identyfikator coś w swojej bazie danych jest tak niepewna jak bazy danych.

Użycie elementu wydaje mi się również w porządku, jeśli jednoznacznie identyfikuje rzecz. Używanie atrybutów data to możliwość zapisania w logice dzielenia, jeśli chcesz, ale możesz nadal używać id w tandemie.

Konwencjonalnie rzecz biorąc, jest to bardzo niepozorny kod w porównaniu do tego, czym jest jQuery.

1

Zamiast ID, można użyć niestandardowego data attributes, tak:

<span class="day_field" data-date="date_13-02-2013_task_4">13.02.2013</span> 

a następnie można uzyskać dostęp do wartości tak w jQuery:

$(".day_field").data("date"); 
0

Jeszcze bardziej eleganckim sposobem powiązania danych z elementem jest użycie jQuery's data. Jednak rozważałbym zbudowanie wtyczki jQuery i użycie jednej instancji dla każdego zadania. Wtyczka zawiera wszystkie potrzebne dane, więc nie trzeba przechowywać jej powiązanego z elementem, co nie jest dobre.

Powiązane problemy