2013-02-26 21 views
6

Ho una domanda sulle migliori pratiche quando si utilizza jQuery/JavaScript/Ajax. Diciamo che ho alcune attività e c'è un calendario per ogni attività. L'utente può fare clic su un giorno in un calendario delle attività e prenotare l'attività in un giorno specifico tramite AJAX. Devo memorizzare la data e l'ID del compito da qualche parte e io sto usando gli ID veramente bizzarre per quella come ad esempio:Best practice con jQuery e chiamate AJAX

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

poi ho allegare un listener in questo modo:

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

La mia domanda è: è questo il modo giusto come farlo? Non ne sono abbastanza sicuro, perché gli ID possono essere molto lunghi + contiene ID nel database che probabilmente non viene salvato affatto.

Grazie! T.

risposta

8

Uso HTML5 dati:

<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 nota che anche se è etichettato come una funzionalità html5, funzionerà perfettamente con i vecchi browser. – Mahn

+0

Questo sembra perfetto. Devo provarlo prima nell'azienda in cui lavoro perché ci sono alcuni utenti solo con IE8 e devo essere sicuro che funzioni correttamente. Per favore, dimmi: è ok che l'ID del compito è mostrato lì e tutti possono vederlo nel codice?Sono sicuro che ogni hacker scoprirà cosa significa il numero, la domanda è se può usarlo per fare cose cattive o no. Grazie! – user1377911

+0

I browser meno recenti li considerano semplicemente come attributi personalizzati, che ignorano. Tutto quello che HTML5 ha fatto era prenotare i nomi iniziando con 'data-' alle applicazioni, in modo che tu possa essere sicuro che non entreranno mai in conflitto con gli attributi standard. Non sono sicuro di quale sia la preoccupazione per gli hacker - l'attributo data corrisponde alla data del calendario, non c'è nulla di segreto a riguardo. – Barmar

2

Il modo giusto Un modo migliore per farlo sarebbe quello di memorizzare i dati in entrambi gli attributi dei dati, o fare l'arco un tag di ancoraggio e memorizzare la stringa param desiderato nella 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> 

con questo per il tag di ancoraggio:

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

Vorrei anche aggiungere gli attributi dei dati all'ancora. – Phil

+0

var date = $ (this) .prop ("data-date"); var task_id = $ (this) .prop ("data-task"); per accedere ai valori – iAmClownShoe

+0

@iAmClownShoe data-task è un attributo, non una proprietà. Quel codice era già trattato in un'altra risposta, non vedo la necessità di ripeterlo –

0

Esporre l'ID effettivo di qualcosa nel vostro database è solo insicuro come database.

L'utilizzo dell'elemento id dell'elemento sembra soddisfacente anche per me, se identifica univocamente una cosa. L'utilizzo degli attributi data è una possibilità di salvare sulla logica di divisione se lo si desidera, ma è comunque possibile utilizzare id in tandem.

Convenzionalmente parlando, questo è un codice molto addomesticato rispetto a gran parte di ciò che jQuery è. attribuisce

1

Invece di un ID, è possibile utilizzare personalizzato data attributes, in questo modo:

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

E poi si può accedere al valore come questo in jQuery:

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

Un altro modo elegante per associare i dati a un elemento è utilizzare jQuery's data. Tuttavia, vorrei prendere in considerazione la costruzione di un plugin jQuery e l'utilizzo di una sua istanza per ogni attività. Un plug-in incapsula tutti i dati di cui ha bisogno, quindi non è necessario memorizzarlo legato all'elemento, il che non è eccezionale.