繁体   English   中英

使用codeigniter在视图上从javascript调用控制器

[英]call controller from javascript on view using codeigniter

大家好,我在从javascript pls help调用控制器方法时遇到麻烦。

我的看法是

<script type="text/javascript">
    function kccbranchselect()
    {
        $.ajax({
        type : 'POST',
        data : 'addreceiptkccbranchid='+ $('#addreceiptkccbranch').val(),
        url : '<?php echo base_url();?>index.php/ctl_dbcont/getmembersbybranch',
        success :   function(data){
                        $('#addreceiptddsmember').val(data);
                    }
        });
    }
</script>
<select id="addreceiptkccbranch" name="addreceiptkccbranch" onChange="kccbranchselect();" tabindex="1" >
    <option value="">--SELECT--</option>
    <?php foreach($branchlist as $value):?>
        <option value="<?=$value['branch_id']?>"><?=$value['branch_name']?></option>
    <?php endforeach; ?>
</select>
<select id="addreceiptddsmember" name="addreceiptddsmember" tabindex="1">
    <?php foreach($member_by_branch as $row) { ?>
        <option value = ""></option>
    <?php } ?>
</select>

我的控制器是

function getmembersbybranch()
{
    $this->load->model('mod_user');
    $addreceiptkccbranchid      =   $_POST['addreceiptkccbranchid'];
    $data['member_by_branch']   =   $this->mod_user->member_receipt_dds($addreceiptkccbranchid);
    redirect('view_addreceipts');
}

我通过选择另一个下拉选项生成一个下拉菜单。 我无法通过在ajax中放置url : '<?php echo base_url();?>index.php/ctl_dbcont/getmembersbybranch',访问控制器方法url : '<?php echo base_url();?>index.php/ctl_dbcont/getmembersbybranch', ,为什么?

这是一个可行的简单解决方案

AJAX请求

$.ajax({
    type : 'POST',
    data : 'addreceiptkccbranchid='+ $('#addreceiptkccbranch').val(),
    url : '<?php echo site_url("ctl_dbcont/getmembersbybranch");?>',
    success :   function(data){
                $('#addreceiptddsmember').val(data);
    }
});

控制者

function getmembersbybranch()
{
    $this->load->model('mod_user');
    $addreceiptkccbranchid      =   $_POST['addreceiptkccbranchid'];
    $data['member_by_branch']   =   $this->mod_user->member_receipt_dds($addreceiptkccbranchid);
    $this->load->view('member_by_branch',$data);
}   

视图

<?php
if($member_by_branch){
    foreach($branchlist as $value):
    ?>
    <option value="<?=$value['member_id']?>"><?=$value['member_name']?></option>
    <?php 
    endforeach;
}
?>

重定向将不起作用。 为下拉选项创建一个简单的视图。

此处的redirect语句无效,因为它是AJAX请求。 您必须从服务器发送html或json响应,您可以在客户端进行处理。 例如

$data['member_by_branch']=$this->mod_user->member_receipt_dds($addreceiptkccbranchid);
echo $data['member_by_branch']; //assuming its html

因此在客户端,您只需在回调方法中使用此语句即可。

$('#addreceiptddsmember').html(data);

尝试这个:

用以下函数替换您的js函数:

$("#addreceiptddsmember").live("change",function(){

   var htmlString="";
     $.ajax({
        type:'POST',
        data:'addreceiptkccbranchid='+ $('#addreceiptkccbranch').val(),
        url:'ctl_dbcont/getmembersbybranch',
        datatype:'application/json',
        success:function(data){
          $.each(data,function(i){
             htmlString+="<option  value='"+data[i].branch_id+"'>"+ data[i].branch_name +"</option>"
          });
          $('#addreceiptddsmember').html(htmlString);
     }
  });
});

在这种情况下,您必须进行htmlsting并使用jquery附加到所选列表,因为您在视图代码中正在使用php foreach,因此它将不可用。

也删除

redirect('view_addreceipts');

并替换为:

echo json_encode($data);
exit;

在控制器中

希望对您有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM