Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在ajax调用后加载视图,CodeIgniter_Php_Ajax_Codeigniter_Controller - Fatal编程技术网

Php 在ajax调用后加载视图,CodeIgniter

Php 在ajax调用后加载视图,CodeIgniter,php,ajax,codeigniter,controller,Php,Ajax,Codeigniter,Controller,我有一个从javascript到控制器中一个方法的ajax调用,控制器中的方法应该加载一个视图(比如,在屏幕上显示一个新页面),尽管一切看起来都正常,但新视图似乎没有加载到屏幕上。我无法使用header或windows.location,因为我正在传递一个数组变量,其中包含要在视图中使用的数据 该页面在Chrome调试控制台的网络选项卡(预览子选项卡,同时选择ajax)下可见。但主屏幕保持原样 如果有人遇到过类似的问题,或者有解决方案,请帮助我 谢谢 好吧,这就是你做错的地方 当您使用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);
您必须了解,您需要通过在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_);
                }
       });