1

これは正確には不可能だと思いますが、間違っているかもしれません。サーバー上のデータを変更するのは POST リクエストだけだと信じている人と、ルールを緩和して GET リクエストでデータを変更できるようにする人の間で、私は単純に引き裂かれています。

この状況を見てください。テーブルがあるとします。各行はデータベース内の行です。<td></td>行の最後の要素として、ファンシーな「X」アイコンを使用して行を削除できるようにしたいと思います。私の知る限り、サーバーに 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="削除"></td>
    ...
    <td><input type="submit" name="delete_198" value="削除"></td>

delete_172=Delete次に、サーバーはフォームPOSTパラメーターで単一を受け取ります。一致するすべてのパラメーターをスキャンし、delete_[0-9]+アンダースコアで分割し、削除するレコードのレコード ID を持っているか、削除するレコード ID を見つけるための Map キーを持っています (レコード ID をページから除外したい場合)セキュリティのため)

それが機能した後、JS イベントハンドラーをフォームの onSubmit イベントにアタッチして、XHR を介してすべてを送信し、テーブルの行を動的に削除します。

于 2010-05-08T00:29:34.853 に答える
2

データを変更する GET リクエストに関する問題の 1 つは、リンクにアクセスすることによってデータが変更されることです。リンクは、Google がサイトをクロールするなど、人がナビゲートすることすらできない場合があります。更新を押すと、データも変更されます。

于 2010-05-07T23:12:23.880 に答える
0

GET と POST に関する規則を無視することはお勧めしません。戻るボタンとページが更新され、そのようなことはあなたを地獄にさせます。(そして、同じ理由で、POST リクエストを送信するたびに、新しいビューにリダイレクトします。)

ユーザーを知っているのはあなただけですが、「Web アプリケーション」で JavaScript を要求し、js を使用しない人を「Web ページ」に固執させることは、今日ではかなり受け入れられていると思います。とにかく、それが価値があるために、私は時々、このような(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 に答える