Domanda

Sto pensando che questo non è esattamente possibile, ma forse mi sbaglio. Sto semplicemente combattuto tra coloro che credono che solo le richieste POST devono modificare i dati sul server e la gente che rilassano la regola e permettono richieste GET di modificare i dati.

Prendere questa situazione. Diciamo che avete una tabella, ogni riga è una riga nel database. Mi piacerebbe per consentire loro di eliminare la riga tramite l'icona di fantasia "X" come l'ultimo elemento <td></td> nella riga. Per quanto ne so, l'unico modo per inviare un POST al server avviene tramite un modulo. Ma ne ho veramente ammucchio un intero modulo nel l'ultimo elemento <td></td> solo per fare un post? O devo imbrogliare e utilizzare un tag <a href=...></a> che invia una richiesta GET?

Si può pensare "fare entrambe le cose! Invia un post e utilizzare il tag <a ...></a>! Usa fantasia javascript + XHR!" E io dico, oh? E come sarà che degradano in un ambiente a zero javascript?

Forse abbiamo raggiunto un punto in cui esso non ha senso preoccuparsi di degradare con grazia? Non ne sono sicuro. Dimmelo tu? Sono nuovo di sviluppo web, ma capisco la maggior parte dei concetti coinvolti.

È stato utile?

Soluzione

Non c'è bisogno di stipare una forma in ciascun td finale - si può circondare l'intera tabella con un unico modulo che ha un pulsante di invio in ogni td finale. Ognuno ha bisogno di un diverso valore di nome / id, es.

    <td><input type="submit" name="delete_172" value="Delete"></td>
    ...
    <td><input type="submit" name="delete_198" value="Delete"></td>

Quindi il server riceve un singolo delete_172=Delete nei parametri modulo POST. Scan attraverso tutti i parametri per abbinare delete_[0-9]+, divisa su di sottolineatura, e si ha l'ID del record da eliminare, o si dispone di una chiave mappa per trovare l'ID del record da eliminare (se si desidera mantenere gli ID dei record fuori dal pagina per la sicurezza)

Dopo di che le opere, attribuiscono un gestore di eventi JS all'evento modulo onSubmit per inviare il tutto attraverso XHR e dinamicamente eliminare la riga della tabella.

Altri suggerimenti

Uno dei problemi con una richiesta GET modifica dei dati è che visitando il collegamento dati viene modificato. Il collegamento potrebbe anche non essere navigato a da una persona, per esempio Google scansione del tuo sito. Colpire aggiornamento cambia anche i dati.

Non consigliare ignorando la Convenzione sulla GET vs POST. I rinfresca pulsante Indietro e di pagina e cose del genere vi darà l'inferno. (E ogni volta che in campo una richiesta POST, reindirizzamento ad una nuova visione, per gli stessi motivi.)

Solo tu conosci i tuoi utenti, ma penso che sia abbastanza accettabile al giorno d'oggi per richiedere javascript in un 'applicazione web' e lasciare che i no-js ragazzi si attaccano a 'pagine web.' In ogni caso, per quel che vale, a volte mi piace fare un meno fantasia (di AJAX) soluzione javascript come questo ...

Mettere una forma ovunque si desidera nella pagina:

<form method="post" target="yourpage.ext" id="deleteRecordForm">
 <input type="hidden" name="IdToDelete" value="" id="deleteRecordInput" />
</form>

Per il tuo link:

<a href="#" onclick="deleteRecord(thisId);return false;">[x]</a>

Infine, il javascript:

<script type="text/javascript">
 function deleteRecord (id){
   if (confirm ('Are you sure you want to delete this record?')){
     document.getElementById('deleteRecordInput').value = id;
     document.getElementById('deleteRecordForm').submit ();
   }
 }
</script>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top