是否有任何方法可以"清除"视图中当前的内容,而不必使用重定向?
我正在我的网站上实现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>
对于我的代码点火器来说,基本上它最终是redirect('whereever'); or $this->load->view("blah");
codeigniter基本上是标准的authtank代码,只是链接和表单是"ajax ed"。因此,使用javascript的代码点火器要么只是加载一个视图,要么重定向到控制器中加载视图的另一个函数。没有什么特别的。只是只有重定向才会显示新添加的视图,而没有重定向的简单加载视图也会显示旧内容。根据评论的建议,在执行ajax后,我似乎必须通过javascript处理它。
但只有重定向才会"清除"当前视图内容,只显示我想要的内容,通常是更新消息或简单的html。但是,重定向需要另一个url更改。
此外,点击几下后,我的"ajaxem"类事件就不再触发了?这就是为什么我制作了updateajaxem()函数,并在每次ajax重载后调用它,但是,这不起作用。我一直在阅读,代表们是否只适用于当前和未来元素?
有没有办法在没有重定向或javascript的情况下清除视图中当前的内容?
从技术上讲,不可能"清除"已经发送到浏览器的内容。如果在您的示例中,浏览器中已经显示了某些内容,那么从服务器端"清除"浏览器窗口通常为时已晚。
这就是重定向工作的原因,它将命令浏览器离开页面并获得新的输出。
您可以编码一个命令来从DOM中删除片段并替换其他片段,AJAX也是如此,但这将是javascript(而不是您所要求的)。
只要你还没有将输出发送到浏览器,你就可以通过使用PHP文档。就像创建一个输出缓冲区并在将输出发送到浏览器之前对其进行操作一样
您可以使用$('body').load('url');使用jQuery,但这就是我要建议的全部内容。这将执行ajax请求,并用新内容替换您的主体。您还可以使用ajax加载程序gif等实现更健壮的解决方案。
您使用ajax,在respose-echo中粘贴您想要粘贴的视图
在PHP中:
if(isset($_GET['ajax'])){
$data = "<table>
<tr>
<td>Data To substitute</td>
</tr>
</table>";
}
In Js:
$.ajax({
url: "test.html",
context: document.body,
success: function(data){
$("#WrapperDivWhereYouWantToAddNewView").html(data);
}
});
我想,这样就可以了。