CakePHP について質問があります。ビューに 2 つのドロップダウン リストを作成します。ユーザーが 1 つのリストの値を変更すると、2 番目のリストも変更されます。現在、これは次のように機能しています。ユーザーがリスト ボックス 1 から選択すると、クリック イベントが発生します。これにより、コントローラーから関数を呼び出す jQuery ajax 関数が起動します。これはすべて正常に動作していますが、コントロールを非同期的に (またはビューで) 再レンダリングするにはどうすればよいですか? 配列をjsonにシリアル化してから、コントロールをjavascriptで再作成できることはわかっていますが、もっと「CakePHP」の方法があるはずです。それがrenderの目的ではありませんか?どんな助けでも素晴らしいでしょう。これまでのコードは次のとおりです。
jQuery:
function changeRole(getId){
$.ajax({
type: 'POST',
url: 'ResponsibilitiesRoles/getCurrentResp',
data: { roleId: getId },
cache: false,
dataType: 'HTML',
beforeSend: function(){
},
success: function (html){
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
}
});
意見:
<?php
echo 'Roles:';
echo'<select name="myOptions" multiple="multiple">';
foreach ($rolesResponsibility as $role) {
echo' <option onclick="changeRole(this.value);" value="'; echo $role["ResponsibilitiesRole"]["role_id"]; echo '">'; echo $role["r"]["role_name"]; echo '</option>';
}
echo '</select>';
echo 'Responsbility:';
echo'<select name="myOptionsResp" multiple="multiple">';
foreach ($respResponsibility as $responsibility) {
echo' <option value="'; echo $responsibility["responsibility"]["id"]; echo '">'; echo $responsibility["responsibility"]["responsibility_name"]; echo '</option>';
}
echo '</select>';
?>
コントローラー機能:
public function getCurrentResp(){ $getId = $this->request->data['roleId'];
$responsibilityResp = $this->ResponsibilitiesRole->find('all',
array("fields" => array('role.role_name','ResponsibilitiesRole.role_id','responsibility.*'),'joins' => array(
array(
'table' => 'responsibilities',
'alias' => 'responsibility',
'type' => 'left',
'foreignKey' => false,
'conditions'=> array('ResponsibilitiesRole.responsibility_id = responsibility.id')
),
array(
'table' => 'roles',
'alias' => 'role',
'type' => 'left',
'foreignKey' => false,
'conditions'=> array('ResponsibilitiesRole.role_id = role.id')
)
),
'conditions' => array ('ResponsibilitiesRole.role_id' => $getId),
));
$this->set('respResponsibility', $responsibilityResp);
//do something here to cause the control to be rendered, without have to refresh the whole page
}