codeigniter清晰视图输出

时间:2012-01-23 14:55:37

标签: php javascript codeigniter views

有没有办法可以"清除"目前在视图中是什么,而不是必须使用重定向?

我正在我的网站上实现ajax,并注意到如果我想返回一个只有我想要显示的视图的ajax请求的响应,我必须使用重定向。其他明智的,如果我只是使用

$this->load->view('blah');

它将保留原始内容(在本例中为表单),并在其上添加视图。我宁愿不使用重定向,因为我想保持网址相同。有没有方法可以清除目前在视图中没有重定向或javascript的什么?

    <script type="text/javascript">

function updateajaxem(){


$(document).on("click", "a.ajaxem", function(e){ 
e.preventDefault();

var action=$(this).attr('href');
//alert(action);
if(action.indexOf('register')>0){

$("div#logininfo").load("http://localhost/testrun/auth/register/").fadeIn();

}
else if(action.indexOf('password')>0)
{
$("div#logininfo").load("http://localhost/testrun/auth/forgot_password/").fadeIn();

}

}); //end 

}
</script>
<script type="text/javascript">

  updateajaxem();

//$("a.ajaxem").live("click", function(e){ 


$(document).on("click","input:submit",function(e){
e.preventDefault();

var formaction=$(this).closest('form').attr('action');
var dataString=$(this).closest('form').serialize();
alert(dataString);
//$("div#logininfo").load(formaction,data);

   $.ajax({
        type: "POST",
        url: formaction,
        data: dataString,
     //   dataType: "json",
        success: function(data) {
alert(data);

        $("div#logininfo").html(data);
        updateajaxem();


       }// end of success

        });        





});





</script>

对于我的codeigniter,基本上它最终成为了一个  redirect('whereever'); or $this->load->view("blah");

codeigniter基本上是标准的auth tank代码,只是链接和表单是&#34; ajax-ed&#34;。因此,与javascript一起使用的codeigniter只是加载视图或重定向到加载视图的控制器中的另一个函数。没什么特别的。只是只有重定向才会显示新添加的视图,而没有重定向的简单加载视图也会显示旧内容。基于评论的建议,在执行ajax之后看起来像是不得不通过javascript处理它。

但只有重定向才能清除&#34;当前视图内容并仅显示我想要的内容,通常是更新消息或简单的html。但是,重定向需要更改其他URL。

此外,点击几下我的&#34; ajaxem&#34;班级事件不再被触发?这就是为什么我创建updateajaxem()函数并在每次ajax重新加载后调用它,但是,这不起作用。我一直在阅读,代表只会为当前和未来元素工作吗?

3 个答案:

答案 0 :(得分:2)

  

如果没有重定向或javascript,有什么方法可以清除视图中当前的内容吗?

从技术上讲,无法“清除”已发送到浏览器的内容。如果在您的示例中,即使某些内容已经显示在浏览器中,从服务器端“清除”浏览器窗口通常也为时已晚。

这就是重定向工作的原因,它将命令浏览器离开页面并获得新的输出。

您可以对命令进行编码以从DOM中删除片段并替换其他片段,因此使用AJAX但这将是javascript(而不是您要求的)。

只要您尚未将输出发送到浏览器,就可以使用output control functions in PHP­Docs清除该输出。就像创建输出缓冲区并在将输出发送到浏览器之前对其进行操作一样

答案 1 :(得分:0)

你可以使用$(&#39; body&#39;)。load(&#39; url&#39;);使用jQuery,但这是关于我必须建议的所有内容。这将执行ajax请求并用新内容替换您的身体。您还可以使用ajax loader Gif等实现更强大的解决方案。

答案 2 :(得分:0)

你使用ajax,回应你想要坚持视图的回声 在PHP中:

if(isset($_GET['ajax'])){
$data = "<table>
<tr>
<td>Data To substitute</td>
</tr>
</table>";
}

在Js中:

$.ajax({
  url: "test.html",
  context: document.body,
  success: function(data){
    $("#WrapperDivWhereYouWantToAddNewView").html(data);
  }
});

我想,这样做。