我认为这不是完全可能的,但也许我错了。我只是在那些认为只有发布请求的人应该在服务器上修改数据以及放宽规则并允许获取请求修改数据的人之间的撕裂。

采取这种情况。假设您有一个表,每行都是数据库中的一行。我想让他们通过奇特的“ x”图标删除行 <td></td> 行中的元素。 AFAIK,将帖子发送到服务器的唯一方法是通过表单。但是我真的把整个表格都塞进了最后一个 <td></td> 元素只是为了做帖子?还是我应该作弊并使用 <a href=...></a> 发送GET请求的标签?

您可能在想“两者都做!发送帖子并使用 <a ...></a> 标签!使用Fancy JavaScript + XHR!”我会说,哦??

也许我们已经达到了不必要的担心优雅降解的意义?我不确定。你告诉我?我是Web开发的新手,但我了解所涉及的大多数概念。

有帮助吗?

解决方案

您不必将表格塞入每个最终的TD中 - 您可以用每个最终TD中有提交按钮的单个表单包围整个桌子。每个需要不同的名称/ID值,例如

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

然后服务器将收到一个 delete_172=Delete 以形式 POST 参数。扫描匹配的所有参数 delete_[0-9]+, ,在下划线上拆分,您拥有要删除的记录的记录ID,或者您有一个地图键来查找要删除的记录ID(如果您想将记录ID远离页面以供安全安全)

在此工作之后,将JS事件处理程序附加到OnSubmit事件的表单,以通过XHR提交整个内容并动态删除表行。

其他提示

GET请求修改数据的问题之一是,通过访问链接数据进行更改。该链接甚至可能不会被一个人导航,例如Google爬上您的网站。点击刷新也会更改数据。

我不建议忽略有关获得VS帖子的约定。后面的按钮和页面刷新以及类似的东西会让您下地狱。 (并且每当您提出邮政请求时,出于相同的原因将新视图重定向。)

只有您知道您的用户,但是我认为现在需要在“ Web应用程序”中需要JavaScript并让No-JS的家伙坚持使用“网页”是非常可以接受的。无论如何,对于它的价值,我有时喜欢做一些像这样的JavaScript解决方案(ajax)的想法。

在页面中放置您想要的任何地方:

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

对于您的链接:

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

最后,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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top