首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >黑洞请求Cakephp

黑洞请求Cakephp
EN

Stack Overflow用户
提问于 2012-07-28 03:58:49
回答 2查看 2K关注 0票数 1

在我的索引页上,我的表的每一行都有复选框。

要编辑选定的项,我使用javascript/jquery获取复选框的类,构建in数组,然后将其发布到控制器中的edit selected方法。

现在,这一切都可以完美地工作,但当我的App Controller中启用了Security时,我的帖子就会变得黑洞,数组也不会张贴。

这是我的index.ctp文件:

代码语言:javascript
复制
<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代码,它等待用户单击,然后构建数组以发布到控制器操作:

代码语言: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
});

任何关于如何让它在不被黑洞的情况下工作的帮助都将不胜感激。

提前感谢

我将$this->Form->create('LocalClock')$this->Form->end()添加到表中,并将$.post()和$.ajax()调用切换为。

如果我发送序列化的表单,我不会得到一个黑洞,但当我查看发布的数据时,它不包括任何复选框ids。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-28 18:04:23

您的示例缺少表单标记。

您需要使用表单帮助器创建和结束表单,以确保安全令牌包含在表单生成中:

代码语言:javascript
复制
$this->Form->create();
  // Other form elements here.
$this->Form->end();
票数 2
EN

Stack Overflow用户

发布于 2012-10-10 17:27:35

您是否尝试过修改crsf防护策略?如果您使用相同的令牌重新加载页面,则Security组件将对请求设置黑洞。

代码语言:javascript
复制
var $components = array('Security'=>array('csrfUseOnce'=>false));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11694865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档