【问题标题】:call controller from javascript on view using codeigniter使用 codeigniter 从 javascript 在视图中调用控制器
【发布时间】:2013-04-03 07:01:35
【问题描述】:

大家好,我在从 javascript 调用控制器方法时遇到了麻烦,请帮助。 .

我的看法是

<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 : '&lt;?php echo base_url();?&gt;index.php/ctl_dbcont/getmembersbybranch', 放入ajax 来访问控制器方法,为什么??

【问题讨论】:

  • 那不是控制器,而只是类控制器中的一个函数。
  • 是的,没错。 .我如何从 javascript @Kaii 调用此函数
  • 你已经在调用它了!但是在 ajax 代码中重定向是做什么的呢?
  • 我的问题是,当我从第一次选择 onchange 调用 javascript 函数中选择一个选项时,我从这个函数中调用控制器,此时控制器函数无法访问

标签: php javascript codeigniter jquery codeigniter-2


【解决方案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;
}
?>

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

【讨论】:

  • 第二个下拉选项与第一个下拉选项在同一视图上,这意味着当我从第一个下拉列表中选择一个值时,此页面应再次加载。 . .
  • 我可以在$this-&gt;load-&gt;view('//same view here',$data); 中调用相同的视图还是应该创建一个新视图@raheel shan
  • 这是一个不错的答案,但 url : '&lt;?php echo site_url("ctl_dbcont/getmembersbybranch");?&gt;',i 无法转到 getmembersbybranch
  • 好吧@Jay,这只是一个示例,您可以根据需要加载相同的视图并使用控制器方法
  • 我想将'addreceiptkccbranchid='+ $('#addreceiptkccbranch').val(), 发送到url : '&lt;?php echo site_url("ctl_dbcont/getmembersbybranch");?&gt;', 但不起作用。 .
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    试试这个:

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

    在控制器中

    希望有帮助!

    【讨论】:

    • 我仍然无法从 url:url:'ctl_dbcont/getmembersbybranch' 访问方法,
    • ajax 不适合我。 . $('#addreceiptkccbranch').val(),此数据不会传递给url:url:'ctl_dbcont/getmembersbybranch',
    • @Jay 很抱歉打错了现在测试这个并在ajax的成功函数中添加alert("success")
    • 是的,警报有效,那么为什么数据没有传递给该方法。 . @sandip
    • @Jay你有firefox的firebug扩展,检查数据是否通过,如果数据不是来自控制器函数,那么数据库查询等有问题跨度>
    猜你喜欢
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2013-07-02
    相关资源
    最近更新 更多