【发布时间】:2012-01-23 14:55:37
【问题描述】:
有什么方法可以“清除”当前视图中的内容,而不必使用重定向?
我正在我的网站上实现 ajax,并注意到如果我想返回一个只包含我想要显示的视图的 ajax 请求的响应,我必须使用重定向。否则,如果我只是使用
$this->load->view('blah');
它将保留原始内容(在本例中为表单)并在其上添加视图。我宁愿不使用重定向,因为我想保持 url 相同。有什么方法可以在没有重定向或 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 代码,只是链接和表单是“ajax-ed”。因此,与 javascript 一起使用的 codeigniter 要么只是加载视图,要么重定向到控制器中加载视图的另一个函数。没什么特别的。只是只有重定向才会显示新添加的视图,而没有重定向的简单加载视图也会显示旧内容。根据 cmets 的建议,执行 ajax 后似乎必须通过 javascript 处理它。
但只有重定向会“清除”当前视图内容并仅显示我想要的内容,通常是更新消息或简单的 html。但是,重定向需要另一个 url 更改。
另外,点击几下后,我的“ajaxem”类事件不再触发?这就是为什么我创建了 updateajaxem() 函数并在每次 ajax 重新加载后调用它,但是,这不起作用。我一直在阅读,代表是否只适用于当前和未来元素?
【问题讨论】:
-
你能展示你的示例代码吗?您可能认为这无关紧要,但是有很多方法可以 解决这个问题,最好在您的具体示例中向您展示。
-
看到您的编辑。对不起,我的意思是请显示控制器代码,因为这是处理所有这些业务的地方。你知道
$this->input->is_ajax_request()吗? -
是的,但据我所知,这需要重定向才能在不使用 javascript 的情况下删除以前的内容。如果不使用重定向,则回显和仅返回视图都不起作用。
标签: php javascript codeigniter views