Question

Je pense que c'est pas tout à fait possible, mais peut-être que je me trompe. Je suis tout simplement tiraillé entre ceux qui croient que seules les requêtes POST doivent modifier les données sur le serveur et les gens qui détendent la règle et autoriser les requêtes GET de modifier les données.

Prenez cette situation. Disons que vous avez une table, chaque ligne est une ligne dans la base de données. Je voudrais leur permettre de supprimer la ligne via une icône de fantaisie « X » comme le dernier élément <td></td> de la ligne. Autant que je sache, la seule façon d'envoyer un POST au serveur se fait via un formulaire. Mais dois-je trucs vraiment une forme entière dans le dernier élément de <td></td> juste pour faire un post? Ou devrais-je tricher et utiliser une balise <a href=...></a> qui envoie une requête GET?

Vous pensez peut-être « faire les deux! Envoyer un et en utilisant la balise <a ...></a>! Utilisez fantaisie javascript + XHR! » Et je vais dire, oh? Et comment cela va se dégrader dans un environnement javascript zéro?

Peut-être que nous avons atteint un point où il ne fait pas de sens à se soucier de dégrader avec élégance? Je ne suis pas sûr. À vous de me dire? Je suis nouveau sur le développement web, mais je comprends la plupart des concepts impliqués.

Était-ce utile?

La solution

Vous n'avez pas à entasser une forme dans chaque td final - vous pouvez entourer toute la table avec une seule forme qui a un bouton d'envoi dans chaque td final. Chacun a besoin d'une valeur nom / identifiant différent, par exemple.

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

Ensuite, le serveur recevra un seul delete_172=Delete dans les paramètres sous forme de POST. Parcourez tous les paramètres correspondant delete_[0-9]+, répartis sur underscore, et vous avez l'ID d'enregistrement de l'enregistrement à supprimer, ou si vous avez une clé carte pour trouver l'ID d'enregistrement pour supprimer (si vous voulez garder les ID d'enregistrement sur la page pour la sécurité)

Après que les travaux, joindre un gestionnaire d'événements JS à l'événement sous forme de onSubmit de soumettre le tout à travers XHR et supprimer dynamiquement la ligne du tableau.

Autres conseils

L'un des problèmes avec une requête GET modification de données est qu'en visitant les données de lien est changé. Le lien pourrait ne pas être même naviguées par une personne, par exemple Google l'exploration de votre site. Actualiser Frapper modifie également les données.

Je ne conseille pas ignorer la convention sur les GET vs POST. Le bouton de retour et page est actualisée et des choses comme ça vous donnera l'enfer. (Et chaque fois que vous le terrain une requête POST, redirection vers une vue nouvelle, pour les mêmes raisons.)

Vous seul connaissez vos utilisateurs, mais je pense qu'il est assez acceptable de nos jours d'exiger javascript dans une « application web » et laisser les gars non-js collent à « pages web ». Quoi qu'il en soit, pour ce que ça vaut, je parfois comme faire une fantaisie moins (que AJAX) solution javascript comme ça ...

Mettre un formulaire où vous voulez dans la page:

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

Pour votre lien:

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

Enfin, le 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top