Php Codeigniter重定向不使用jQuery mobile更新url
我有一个登录控制器,当用户有效时,它会重定向到我的索引页。重定向可以工作,但在索引页面上,url仍然是验证方法的url,例如:login/validate\u login/。如果我单击索引页上的链接,然后尝试返回浏览器历史记录,浏览器会将我指向验证方法,而不是索引页 我该如何解决这个问题 我尝试过使用重定向同时刷新和定位,但都没有成功 我怀疑这是jQuery mobile的ajax调用的问题,但我不确定 谢谢你的帮助。 问候 注意:我会在索引页上发布url的图像,但我不允许发布,因为我是新用户 我的验证方法:Php Codeigniter重定向不使用jQuery mobile更新url,php,jquery,codeigniter,redirect,jquery-mobile,Php,Jquery,Codeigniter,Redirect,Jquery Mobile,我有一个登录控制器,当用户有效时,它会重定向到我的索引页。重定向可以工作,但在索引页面上,url仍然是验证方法的url,例如:login/validate\u login/。如果我单击索引页上的链接,然后尝试返回浏览器历史记录,浏览器会将我指向验证方法,而不是索引页 我该如何解决这个问题 我尝试过使用重定向同时刷新和定位,但都没有成功 我怀疑这是jQuery mobile的ajax调用的问题,但我不确定 谢谢你的帮助。 问候 注意:我会在索引页上发布url的图像,但我不允许发布,因为我是新用户
function validate_login($controller='',$method='') {
$this->load->library('form_validation');
$this->load->model('workout_model');
$this->form_validation->set_rules('ex_password','Koden','trim|required|min_length[4]|max_length[4]|callback_pw_check');
if($this->form_validation->run() == FALSE) {
$this->index();
} else {
if($query = $this->workout_model->validate()) {
$data = array(
'is_logged_in' => true,
'user_id' => $query->id,
'current_exercise' => '1'
);
$this->session->set_userdata($data);
if($controller=='' || $method=='') {
redirect("workout");
} else {
redirect($controller."/".$method);
}
} else {
$this->index();
}
}
}
有两种方法可以处理这个问题,它与AJAX无关,而是CI的工作方式。最快最简单的方法就是改变
$this->index();
到
这样做实际上并不是重定向,而是调用当前URL上的index函数,即validate_login。这样做的问题是,如果登录失败,它仍将保留在validate_登录URL上,以便下次尝试
处理它的最佳方法是从控制器中的索引函数调用实际的validate_login函数,而不是表单本身。因此,将表单发送回index,让index控制器检查表单数据,如果为true,则调用validate_login()。这样,您就不会真正离开索引页面,它只会处理登录表单是否已提交。解决URL问题。实际上,我对所有提交表单以进行任何形式验证的页面都是这样做的。要正确更新URL,似乎有两件事是必要的:使用重定向(…)而不是方法调用,以及禁用jQuery Mobile ajax调用。有两种方法:添加和属性到最初指向方法的链接
<a href='.../validate_login/...' data-ajax='false'>...</a>
或者,通过编辑设置(未测试)全局禁用ajax调用。当您通过HTML表单(如登录注册)提交时。然后您还有某种仪表板重定向,您需要像这样更新表单标记。当我使用Codeigniter和jquery mobile usedata ajax=“false”时会发生这种情况。
现在看起来可能有点开销,但你稍后会感谢我的。非常好的帖子。然而,这只是一个用于记录我的健身锻炼的小应用程序,所以我想改天我会尝试一下。这个问题很烦人,因为它是“beta”版本唯一剩下的东西…谢谢你的回复。我没法让它工作。。更改$this->index();不起作用,将validate_login()代码放入索引()也不起作用。也许我还不够清楚。我有两个控制器,一个是训练,另一个是训练。在训练的构造函数中,我调用了一个名为is_logged_In()的方法,该方法检查是否设置了userdata。如果没有,我将重定向到训练登录控制器。友善的regards@RickCalder验证错误怎么办?当重定向时,错误将是lostlol,6年前的答案><如果您有错误,您可以按照文档进行重定向,并显示错误和以前的formdata。
<a href='.../validate_login/...' data-ajax='false'>...</a>
<form id="login-box" method="post" action="<?php echo base_url('index.php/auth/login_user'); ?> " data-ajax="false">