-1

HTMLテーブルがあり、最初の列にIDがあります。この列は非表示です。私は今これを読んだことがありますが、これは悪いアプローチです。

しかし、ユーザーが行を選択し、削除ボタンをクリックしてこの ID で ajax 投稿を行うときに、この非表示の ID が必要です。

行ごとにこのIDを別の場所に配置する必要がありますが、このアプローチが悪いのはなぜですか?

4

5 に答える 5

5

どこに配置しても、ブラウザーに転送された HTML に特定のデータが含まれていれば、ユーザーはそれを見ることができます。

非表示にするなどして間接的にすることはできますが、これを行うと決して安全になりません。

私の提案は、クライアント側で物事を隠そうとするよりも、削除操作を試みる人がそうする権限を持っていることを保証する、サーバー側にある種の厳密なアクセス制御メカニズムを実装することです.

推測できないようにするために、ID をクライアントに送信する前に、ある種の暗号化を ID に適用することを検討することもできます。

于 2013-05-04T13:50:22.247 に答える
0

行要素ごとにデータ属性を追加し、行をクリックしたときにそれを読み取ることができます。ここでの利点は、データ属性値が画面に表示されないことです。

于 2013-05-04T13:51:46.700 に答える
0

表の行に ID を属性として追加します。このようなもの:

<tr data-id="1">
    <td><span class="delete">Delete</span></td>
</tr>

<tr data-id="2">
    <td><span class="delete">Delete</span></td>
</tr>

ユーザーが削除または編集をクリックすると、jqueryで取得します。

$('.delete').bind('click', function (e) {
    var $row = $(this).closest('tr');
    var id = $row.attr('data-id');

    // now you have `id`
});
于 2013-05-04T13:57:55.043 に答える
0

資格情報としての機密データには、クライアント側からアクセスできません。しかし、機密データと呼ばれるものがわからないので、jquery データ オブジェクトを使用することをお勧めします。これには、DOM を可能な限りクリーンに保つという利点があります。

//head or any DOM element
$('head').data('key','myValue'); //set
var value = $('head').data('key'); //get
于 2013-05-04T13:58:10.077 に答える
0

すでに行ごとに「削除ボタン」がある場合、通常の規則では、次のように、各フォーム内の非表示の入力フィールドに id を配置します。

<tr>
  <td>John Smith</td>
  <td>37</td>
  <td>
    <form action="/delete">
      <input type="hidden" name="id" value="id_for_this_row">
      <button type="submit">Delete</button>
    </form>
  </td>
</tr>

このコードは、Javascript がまったくなくても機能します。その後、AJAX などを使用してフォームをバックグラウンドで投稿することにより、動作を強化したい場合は、それを上に追加するだけです。

あなたのアプリケーションがすでに AJAX である場合、または ごとに別のフォームを使用できない場合は<tr>、Sampath の答えが頼りになります (data-id各 に属性を追加します<tr>)。

于 2013-05-04T13:58:50.870 に答える