0

我正在将 codeigniter 与 phpgrid 集成,并且在通过 javascript 和 codeigniter 控制器将行值从 phpgrid(在 VIEW A 中)传递到另一个视图(VIEW B)时遇到问题

我在 PHPGRID (VIEW A) 中有一个像这样的虚拟列:

$col_formatter = <<<COLFORMATTER
function(cellvalue, options, rowObject, rowid){ 
    var sessid = rowObject[0];

    return '<input type="button" value="View" onclick="btnView('+sessid+')">';
} 
COLFORMATTER;

和视图 A 中的 javascript:

function btnView(sessid){
    var dataRow = {
        sessid:sessid,
    };
    $.ajax({
        type:"POST",
        url: "<?php echo base_url()."index.php/main/tes"; ?>",
        data: dataRow,
        success: function(msg){
        }
    });
    return false;
}

在 Codeigniter 控制器中:

public function tes(){
    $data['sessid'] = $_POST['sessid']; 
    $this->load->view('view_b', $data);
}

我似乎无法加载视图。我使用Mozilla的Firebug知道响应,响应是我的view_b视图的代码,但我怎样才能切换到那个视图呢?

4

3 回答 3

2
//Your are using ajax for some operation and want to reload the view page the you can test these options:
1) take a div in current view page and assing ajax retrun message to that div

function btnView(sessid){
var dataRow = {
    sessid:sessid,
};
$.ajax({
    type:"POST",
    url: "<?php echo base_url()."index.php/main/tes"; ?>",
    data: dataRow,
    success: function(msg){
         $("#divid").html(msg);
    }
});
return false;
}


//Or 2)just redirect to your view page again

function btnView(sessid){
var dataRow = {
    sessid:sessid,
};
$.ajax({
    type:"POST",
    url: "<?php echo base_url()."index.php/main/tes"; ?>",
    data: dataRow,
    success: function(msg){
        window.location.href=path to your view page;//<?php echo base_url()."index.php/controller/function"; ?>
    }
});
return false;
}
于 2013-07-19T04:53:52.553 回答
0

事实证明,将变量从 javascript 传递到 codeigniter 控制器只是:

function btnView(sessid){
    window.location = "printvo/"+sessid;
}

我用ajax是因为不知道怎么传变量,一直以为传变量是用括号:window.location = "printvo("+sessid+")"; 那没有用。

于 2013-07-26T01:14:53.877 回答
0

如果我理解正确,您想从 VIEW A 转到 VIEW B(意味着窗口位置的实际更改)并将一个值传递给 VIEW B,以便它可以生成一些动态内容。好吧,AJAX 不是这里的解决方案,因为它不会触发页面更改,而是会将响应的标记/文本作为字符串返回。

但是仍然有很多方法可以实现你想要的,使用 Codeigniter 更简单的方法是为你的控制器方法使用一个参数,你可以在链接中作为 uri 的一部分发送:

HTML

<a href="http://example.com/index.php/main/tes/{sessid}">View</a>

由于您使用 Javascript 来生成标记,因此您需要这样的东西

return '<a href="<?php echo site_url('main/tes')?>/'+sessid+'">View</a>';

*请注意,您现在将拥有一个链接而不是按钮,但您可以使用 CSS 以任何您想要的方式对其进行样式设置。

您现在可以像这样检索控制器中的值:

PHP

public function tes($sessid){
    $data['sessid'] = $sessid; 
    $this->load->view('view_b', $data);
}

很简单。第二种选择是使用表单而不是按钮来使用 GET 或 POST 发送值,表单在提交时会触发页面更改:

HTML

<form action="http://example.com/index.php/main/tes" method="get">
    <input type="submit" value="{ssid}" name="sessid" />
</form>

再次使用javascript:

return '<form action="<?php echo site_url('main/tes')?>" method="get">'
       +'<input type="submit" value="'+sessid+'" name="sessid" />'
       +'</form>';

并在您的控制器中获取值:

PHP

public function tes(){
    $data['sessid'] = $_GET['sessid']; //OR $_POST['sessid']
    $this->load->view('view_b', $data);
}
于 2013-07-24T08:03:36.507 回答