2013-10-25 69 views
2

我正在嘗試渲染元素並將其刷新。所以,當用戶點擊一個按鈕時,它會調用一個調用php函數的ajax函數。該功能將數據添加到數據庫。這一切都有效。但是,現在我想用新數據重新渲染元素。這是我到目前爲止有:cakephp使用數據渲染元素

public function add_role() { 
    $this->autoRender = false; 
    if ($this->request->data['Role']) { 
     $this->Role->create(); 
     if ($this->Role->save($this->request->data)) { 
      $this->set('roles', $this->Role->find('all')); 
      $this->render('/Elements/role_table'); 
     }else{ 
      return "Failed Insert"; 
     } 

    } 
} 

但是,這將導致該元素在網頁中只顯示兩次(雖然新的更新)。我如何正確執行此操作或刪除原始元素?

感謝

編輯:添加的元素和jQuery

元素:

<?php 
echo' 
<div style="overflow-y: auto; overflow-x: none; height: 100%; width:350px;" id="roleTable"> 
<table style=" border:1px solid black; width:300px; "> 
    <tr> 
     <th>Id</th> 
     <th>Role</th> 
    </tr> 
    '; 

foreach ($roles as $role) { 
    echo ' 
    <tr> 
     <td>'; 
      echo $role["Role"]["id"]; 
     echo ' 
     </td> 
     <td>'; 
      echo $role["Role"]["role_name"]; 
      echo' 
     </td> 

    </tr>'; 
} 
echo' 
<tr> 
    <td colspan="2" style="border-top: 1px solid black;"> 
     Add Role: 
    </td> 
</tr> 
<tr> 

    <td colspan="2"> 
     <form id="ajaxPostForm"> 
      <input type="text" name="data[Role][role_name]" style="width: 60%" 
        required="required" id="tbRole" > 
      <input value="Save" type="button" onclick="save_role();"> 
     </form> 

    </td> 
</tr> 
<tr> 
    <td colspan="2"> 
     <div id="addRoleStatus"> 
     </div> 
    </td> 
</tr> 
</table></div>'; 

jQuery的原創插入:

function save_role() { 
    var role= $('#tbRole').val(); 
    var base=$('#ajaxPostForm'); 
    var params=base.serialize(); 

    $.ajax({ 
     type: 'POST', 
     url: 'Roles/add_role', 
     data: params, 
     cache: false, 
     dataType: 'HTML', 
     beforeSend: function(){ 
     }, 
     success: function (html){ 
      $('#addRoleStatus').html(html);  
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      alert("Status: " + textStatus); alert("Error: " + errorThrown); 
     } 

    }); 
} 
+0

你應該在這裏發佈你的jquery,因爲cakePHP部分聽起來像是在工作。但是,如果用您從ajax調用中獲得的數據替換您顯示的元素的父元素的內容,請使用$('#parentElement')。html(data);它應該用新的替換舊版本。 – Kai

+0

感謝您的回覆。但我不確定我是否遵循。我認爲$ this-> render('/ elements/role_table');會照顧渲染(事實上,它確實沒有正確渲染)。我需要什麼jQuery?我唯一的jQuery是這樣的:用戶提交一個記錄到一個表。這是用jQuery完成的。然後,我想要更新視圖,以在成功插入表格後反映添加/刪除/編輯的記錄。我做錯了嗎? – jason

+0

爲了以防萬一,我添加了jQuery和元素代碼。任何幫助將不勝感激。 – jason

回答

0

我認爲你需要刪除原來的DOM元素通過使用.remove()在AJAX更新上使用jQuery進行第一次呈現調用呈現。

+0

感謝您的回覆。我已經添加了我的元素和jQuery的代碼。我試圖使用.Remove()代碼,但最終刪除了整個元素。我的印象是蛋糕$ this-> render('/ Elements/role_table');但是代碼會重新渲染整個塊。任何幫助都會很棒。 – jason

1

我發現用jQuery的東西在這裏:$('#addRoleStatus').html(html);

你是呼應也包含div#addRoleStatus並在AJAX的成功你的呼應元素設置爲相同的div#addRoldStatus的元素。

我認爲這是點混亂。