在 ajax 调用后加载视图,CodeIgniter

Posted

技术标签:

【中文标题】在 ajax 调用后加载视图,CodeIgniter【英文标题】:loading a view after an ajax call, CodeIgniter 【发布时间】:2013-03-01 18:38:31 【问题描述】:

我有一个从 javascript 到控制器中的方法的 ajax 调用,控制器中的方法应该加载一个视图(例如,在屏幕上显示一个新页面),虽然一切看起来都很好,但新视图并没有似乎加载到屏幕上。我不能使用 header 或 windows.location,因为我正在传递一个数组变量,其中包含要在视图中使用的数据。

该页面在 Chrome 调试控制台的网络选项卡(预览子选项卡,同时选择 ajax)下可见。但主屏幕保持不变。

如果有人遇到过类似的问题,或者有解决方案,请帮助我。

谢谢!!

【问题讨论】:

您是要更改屏幕的全部内容还是仅更改元素中的内容? 我正在尝试更改整个内容,加载一个全新的视图 我不确定你为什么要使用 ajax。为什么不直接链接到控制器/方法? 【参考方案1】:

好吧,这就是你做错了。

当您使用 ajax 请求页面时,它不会返回该页面。

当你使用 $this->load->view('pagename',$datapassed);它会加载视图,这就是为什么您什么也看不到。

你要做的就是使用

$data=$this->load->view('pagename',$datapassed, TRUE);

它将做的是,它将返回该页面并将其保存在 $data 之后你可以使用打印它

$this->set_output($data); 

并在 ajax 结果中接收它并将其加载到 div 中。

如果你想刷新整个页面,你可以使用

$(body).html(result);

您必须了解,您需要通过在加载视图中提供第三个参数来发送 html 页面。

【讨论】:

是的,这确实对我有帮助,但我没有直接回复 $this->set_output($data),而是直接回显了变量 echo $data 并为我工作。感谢您的概念 $this->output->set_output($data); 为我工作。我不知道他们是否更新了它,但我使用的是 CodeIgniter 版本 3.0.4。 我不知道以前的版本,但从CI_VERSION 3.1.9 开始,只有$this->load->view('pagename',$datapassed) 足以将html 返回到ajax 请求。【参考方案2】:

在控制器类中

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>  

另一个要加载到控制器函数(extra_info.php)上的视图文件,如get_view_ajax函数所引用的

<h1>This page is called from ajax function </h1>

【讨论】:

【参考方案3】:

记住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_);
                
       );

【讨论】:

以上是关于在 ajax 调用后加载视图,CodeIgniter的主要内容,如果未能解决你的问题,请参考以下文章

加载 angularjs 视图后加载 jquery 模块?

按下按钮后加载表格视图笔尖

php - Laravel:如何在从下拉列表中选择更改后加载 Ajax 数据?

ShareThis - AJAX 内容不工作后加载的按钮

Ajax用响应替换html,但在加载css,js后加载内容

jQuery:获取 .timeago() 以处理 DOM 就绪后加载的元素(Ajax)