使用codeigniter从javascript上调用控制器

时间:2013-04-03 07:01:35

标签: php javascript codeigniter jquery codeigniter-2

嘿伙计们我在从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');
}

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

3 个答案:

答案 0 :(得分:1)

这是一个简单的解决方案

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;
}
?>

重定向无效。为下拉选项创建一个简单视图。

答案 1 :(得分:0)

这里的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);

答案 2 :(得分:0)

试试这个:

用这个函数替换你的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;
控制器中的

希望它有所帮助!