我正在嘗試渲染元素並將其刷新。所以,當用戶點擊一個按鈕時,它會調用一個調用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);
}
});
}
你應該在這裏發佈你的jquery,因爲cakePHP部分聽起來像是在工作。但是,如果用您從ajax調用中獲得的數據替換您顯示的元素的父元素的內容,請使用$('#parentElement')。html(data);它應該用新的替換舊版本。 – Kai
感謝您的回覆。但我不確定我是否遵循。我認爲$ this-> render('/ elements/role_table');會照顧渲染(事實上,它確實沒有正確渲染)。我需要什麼jQuery?我唯一的jQuery是這樣的:用戶提交一個記錄到一個表。這是用jQuery完成的。然後,我想要更新視圖,以在成功插入表格後反映添加/刪除/編輯的記錄。我做錯了嗎? – jason
爲了以防萬一,我添加了jQuery和元素代碼。任何幫助將不勝感激。 – jason