1

我认为这不太可能,但也许我错了。我只是在那些认为只有 POST 请求应该修改服务器上的数据的人和放松规则并允许 GET 请求修改数据的人之间左右为难。

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

您可能在想“两者都做!发送 POST 并使用<a ...></a>标签!使用精美的 javascript + xhr!” 我会说,哦?在零 JavaScript 环境中,这将如何降级?

也许我们已经到了担心优雅降级没有意义的地步?我不知道。你告诉我?我是 Web 开发的新手,但我了解所涉及的大部分概念。

4

3 回答 3

3

您不必在每个最终 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,或者你有一个Map键找到要删除的记录ID(如果你想保留记录ID在页面外为了安全)

之后,将 JS 事件处理程序附加到表单 onSubmit 事件以通过 XHR 提交整个事情并动态删除表格行。

于 2010-05-08T00:29:34.853 回答
2

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

于 2010-05-07T23:12:23.880 回答
0

我不建议忽略关于 GET 与 POST 的约定。后退按钮和页面刷新,诸如此类的事情会让你下地狱。(并且每次您发出 POST 请求时,出于相同的原因重定向到新视图。)

只有您了解您的用户,但我认为现在在“Web 应用程序”中要求使用 javascript 并让不使用 js 的人坚持使用“网页”是可以接受的。无论如何,为了它的价值,我有时喜欢做一个不那么花哨(比 AJAX)的 javascript 解决方案,像这样......

将表单放在页面中您想要的任何位置:

<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>
于 2010-05-07T22:54:39.203 回答