我有一个从 javascript 到控制器中的方法的 ajax 调用,控制器中的方法应该加载一个视图(比如,在屏幕上显示一个新页面),虽然一切看起来都很好,但新视图似乎没有加载屏幕上。我不能使用 header 或 windows.location,因为我正在传递一个数组变量,其中包含要在视图中使用的数据。
该页面在 Chrome 调试控制台的网络选项卡(预览子选项卡,同时选择 ajax)下可见。但主屏幕保持原样。
如果有人遇到过类似的问题,或者有解决方案,请帮助我。
谢谢!!
我有一个从 javascript 到控制器中的方法的 ajax 调用,控制器中的方法应该加载一个视图(比如,在屏幕上显示一个新页面),虽然一切看起来都很好,但新视图似乎没有加载屏幕上。我不能使用 header 或 windows.location,因为我正在传递一个数组变量,其中包含要在视图中使用的数据。
该页面在 Chrome 调试控制台的网络选项卡(预览子选项卡,同时选择 ajax)下可见。但主屏幕保持原样。
如果有人遇到过类似的问题,或者有解决方案,请帮助我。
谢谢!!
好的,这就是你做错了什么。
当您使用 ajax 请求页面时,它不会返回该页面。
当你使用 $this->load->view('pagename',$datapassed); 它加载视图,这就是为什么你什么也看不到。
你要做的就是使用
$data=$this->load->view('pagename',$datapassed, TRUE);
它会做的是,它将返回该页面并将其保存在 $data 之后,您可以使用打印它
$this->set_output($data);
并在 ajax 结果中接收它并将其加载到 div 中。
如果你想刷新整个页面,你可以使用
$(body).html(result);
您必须了解您需要通过在加载视图中提供第三个参数来发送 html 页面。
在控制器类
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>
在 get_view_ajax 函数中引用的控制器函数 (extra_info.php) 上要加载的另一个视图文件
<h1>This page is called from ajax function </h1>
请记住 dataType 必须是“html”
$.ajax({
type: 'POST',
url: '<?php echo base_url(); ?>/controllerName/functionName',
dataType: "html",
success: function (response) {
$("#oh").html(response);
},
error: function (error_) {
MYLOG(error_);
}
});