2012-07-27 54 views
1

在我的索引頁上,我在表格的每一行都有複選框。Black Holed Request Cakephp

要編輯選定的項目,我使用javascript/jquery獲取複選框的類,構建一個ID數組,然後將其發佈到我的控制器中的編輯選定方法。

現在,這一切都完美的工作,但是當我的應用程序控制器中的安全啓用,我的帖子被黑洞和陣列不張貼。

這裏是我的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 
}); 

如何得到它沒有得到黑色帶孔的工作有什麼幫助,將不勝感激。

在此先感謝

--------------------------------------- - -編輯 - - - - - - - - - - - - - - - - - - - - - - - 我將$this->Form->create('LocalClock')$this->Form->end()添加到表格中,並將$ .post()切換爲和$ .ajax()調用。

如果我發送序列化表單,我沒有看到黑洞,但是當我查看發佈的數據時,它不包含任何複選框ID。

回答

2

您的示例缺少表單標籤。

您需要創建和結束與表單輔助形式,以確保安全令牌包含在表單生成:

$this->Form->create(); 
    // Other form elements here. 
$this->Form->end(); 
+1

我試着在包含編輯/刪除選定按鈕的div後面的foreach循環行和form-> end()後放入'form-> create()',但我仍然越來越黑。有任何想法嗎? – RXC 2012-07-30 12:17:06

+0

我想我可能知道問題出在哪裏,我包含'form-> create'和'form-> end'代碼,但是我發佈數據的按鈕沒有獲取安全信息。 – RXC 2012-07-30 12:22:47

+0

我發現我的問題是我的大表單中有多個表單。我刪除了這些,一切正常。謝謝 – RXC 2012-08-02 13:53:51

1

你試圖修改CRSF保護政策? 如果您使用相同的標記重新加載頁面,則安全組件將黑屏請求。

var $components = array('Security'=>array('csrfUseOnce'=>false)); 
+0

我的確在研究這個,但是我最終改變了我提交表單的方式。謝謝 – RXC 2012-10-11 13:47:48