1

私のインデックス ページでは、テーブルの各行にチェック ボックスがあります。

選択した項目を編集するには、javascript/jquery を使用してチェックボックスのクラスを取得し、ID の配列を作成してから、コントローラーの edit selected メソッドに投稿します。

現在、これはすべて完全に機能しますが、App Controller でセキュリティを有効にすると、投稿がブラック ホールになり、配列が投稿されません。

ここに私のindex.ctpファイルがあります:

<table id="indexTable">
    <thead><tr>
        <th> <?php echo $this->Form->checkbox('select_all', array('value' => 'select_all')); ?> </th>
        <th> <?php echo $this->Paginator->sort('id', 'ID'); ?> </th>
        <th> <?php echo $this->Paginator->sort('name', 'Name'); ?> </th>
        <th>Auto Offset  </th>  <th>UTC Offset Sec  </th>  <th>In Month  </th>
        <th>In Week      </th>  <th>In Dow          </th>  <th>In Hour   </th>  <th>Out Month   </th>
        <th>Out Week     </th>  <th>Out Dow         </th>  <th>Out Hour  </th>  <th>Offset Sec  </th>
        <th>DST Ref      </th>  <th>Actions      </th>
    </tr></thead>

    <tbody>

<?php
$this->Form->create('LocalClock');
foreach($localClocks as $LocalClock) { ?>
        <tr>
            <td>  <?php echo $this->Form->checkbox('LocalClocks'.$LocalClock['LocalClock']['id'], array('value' => $LocalClock['LocalClock']['id'], 'hiddenField' => false));?>  </td>
            <td>  <?php echo $LocalClock['LocalClock']['id']; ?>              </td>
            <td>  <?php echo $LocalClock['LocalClock']['name']; ?>            </td>
            <td>  <?php echo $LocalClock['LocalClock']['auto_offset']; ?>     </td>
        </tr>
<?php } ?>
    </tbody>
</table>

</div>

<!-- This <div> contains all the actions that can be performed on the Local Clocks. -->
<div>
    <p>

        <span style="float: left">
            <?php echo $this->Html->link(__('Edit All Items'), array('action' => 'editAll'), array('class' => 'link'));?> &nbsp;&nbsp;
        </span>

        <span style="float: left">
            <?php echo $this->Html->link(__('Edit Selected Items'), array('action' => 'lceditSelected'), array('class' => 'general_dialog'));?> &nbsp;&nbsp;
        </span>

        <span style="float: right">
            <?php echo $this->Html->link(__('Delete Selected Items'), array('action' => 'deleteSelected'), array('class' => 'general_dialog'));?> &nbsp;&nbsp;
        </span>
    <?php $this->Form->end(); ?>

    </p>
</div>

重要でないものをいくつか取り出しました。問題は、選択した編集機能と選択した機能を削除することです。

以下は、クリックを待って配列を作成し、コントローラー アクションにポストする JavaScript コードです。

$('.general_dialog').live('click', function()
{
    $.ajaxSetup({ async: false });

        var $selDialog = $("#general_dialog").dialog(
        {
            autoOpen: false,
            modal: true,
        });

        var postInfo = $('#LocalClockIndexForm').serialize();
        $.ajax({
        url: $(this).attr('href'),
        type: "post",
        data: postInfo,
        success: function (response)
        {
            alert('success');
        },
        error: function()
        {
            alert("failed");
        }
    });
        $selDialog.load($(this).attr('href'), function ()
        {
            $selDialog.dialog('open');
        });
    return false; // Ensure the controller does not redirect to the actual edit page
});

ブラックホールを取得せずに動作させる方法についての助けをいただければ幸いです。

前もって感謝します

- - - - - - - - - - - - - - - - - - - - - 編集 - - - - --------------------------------------- テーブルに and を追加$this->Form->create('LocalClock')$this->Form->end()、$ を切り替えました.post() と $.ajax() 呼び出し。

シリアル化されたフォームを送信すると、ブラック ホールは発生しませんが、投稿されたデータを見ると、チェック ボックス ID が含まれていません。

4

2 に答える 2

2

あなたの例にはフォームタグがありません。

セキュリティ トークンがフォーム生成に含まれるようにするには、フォーム ヘルパーを使用してフォームを作成し、終了する必要があります。

$this->Form->create();
  // Other form elements here.
$this->Form->end();
于 2012-07-28T10:04:22.820 に答える
1

crsf保護ポリシーを変更しようとしましたか?同じトークンでページをリロードすると、セキュリティコンポーネントはリクエストをブラックホール化します。

var $components = array('Security'=>array('csrfUseOnce'=>false));
于 2012-10-10T09:27:34.603 に答える