Php 在ajax调用后加载视图,CodeIgniter
我有一个从javascript到控制器中一个方法的ajax调用,控制器中的方法应该加载一个视图(比如,在屏幕上显示一个新页面),尽管一切看起来都正常,但新视图似乎没有加载到屏幕上。我无法使用header或windows.location,因为我正在传递一个数组变量,其中包含要在视图中使用的数据 该页面在Chrome调试控制台的网络选项卡(预览子选项卡,同时选择ajax)下可见。但主屏幕保持原样 如果有人遇到过类似的问题,或者有解决方案,请帮助我Php 在ajax调用后加载视图,CodeIgniter,php,ajax,codeigniter,controller,Php,Ajax,Codeigniter,Controller,我有一个从javascript到控制器中一个方法的ajax调用,控制器中的方法应该加载一个视图(比如,在屏幕上显示一个新页面),尽管一切看起来都正常,但新视图似乎没有加载到屏幕上。我无法使用header或windows.location,因为我正在传递一个数组变量,其中包含要在视图中使用的数据 该页面在Chrome调试控制台的网络选项卡(预览子选项卡,同时选择ajax)下可见。但主屏幕保持原样 如果有人遇到过类似的问题,或者有解决方案,请帮助我 谢谢 好吧,这就是你做错的地方 当您使用ajax请
谢谢 好吧,这就是你做错的地方 当您使用ajax请求页面时,它不会返回该页面 使用$this->load->view('pagename',$datapassed)时;它加载视图,这就是为什么你什么也看不到 你要做的就是使用
$data=$this->load->view('pagename',$datapassed, TRUE);
它将要做的是,它将返回该页面并将其保存在$data中
之后,您可以使用
$this->set_output($data);
并在ajax结果中接收该结果并将其加载到div中
如果你想刷新整个页面,你可以使用
$(body).html(result);
您必须了解,您需要通过在load view中提供第三个参数来发送html页面。在controller类中
function get_view_ajax()
{
$data['username] = $_POST['username];
$response = $this->load->view('radius/radius_corporate_graph',$data,TRUE);
echo $response;
}
在启动ajax调用的视图文件中
$('#button').click(function(){
var username = $('#username').val();
$.ajax({
type:'POST',
url:"<?php echo base_url(); ?>controller_name/get_view_ajax/",
data: "username="+username,
success:function(msg){
$("#div_result").html(msg);
},
error: function(result)
{
$("#div_result").html("Error");
},
fail:(function(status) {
$("#div_result").html("Fail");
}),
beforeSend:function(d){
$('#div_result').html("<center><strong style='color:red'>Please Wait...<br><img height='25' width='120' src='<?php echo base_url();?>img/ajax-loader.gif' /></strong></center>");
}
});
});
<div id="div_result">
<a href="#" id="button">Click here </a>
$(“#按钮”)。单击(函数(){
var username=$('#username').val();
$.ajax({
类型:'POST',
url:“控制器名称/获取视图\u ajax/”,
数据:“用户名=”+用户名,
成功:功能(msg){
$(“#div_result”).html(msg);
},
错误:函数(结果)
{
$(“#div_result”).html(“错误”);
},
失败:(功能(状态){
$(“#div_result”).html(“Fail”);
}),
发送前:功能(d){
$('div_result').html(请稍候…
img/ajax loader.gif'/>);
}
});
});
要加载到控制器函数(extra_info.php)上的另一个视图文件,参见get_view_ajax函数
<h1>This page is called from ajax function </h1>
此页面是从ajax函数调用的
请记住数据类型必须是“html”
$.ajax({
键入:“POST”,
url:“/controllerName/functionName”,
数据类型:“html”,
成功:功能(响应){
$(“#oh”).html(回应);
},
错误:函数(错误){
MYLOG(错误);
}
});
您是想更改屏幕的全部内容还是只更改元素中的内容?我想更改全部内容,加载一个新的视图。我不知道您为什么要使用ajax。你为什么不直接链接到控制器/方法?是的,这确实帮助了我,但我没有直接回显变量echo$data
,而是直接回显变量echo$data
,为我工作。感谢您的概念$this->output->set\u output($data)代码>适合我。我不知道他们是否已经更新了它,但我正在使用CodeIgniter版本3.0.4。我不知道以前的版本,但从CI_版本3.1.9
开始,只有$this->load->view('pagename',$datapassed)
就足以将html返回到ajax请求。
$.ajax({
type: 'POST',
url: '<?php echo base_url(); ?>/controllerName/functionName',
dataType: "html",
success: function (response) {
$("#oh").html(response);
},
error: function (error_) {
MYLOG(error_);
}
});