Codeigniter重定向不使用jQuery mobile更新URL

时间:2012-10-12 17:13:56

标签: php jquery codeigniter redirect jquery-mobile

我有一个登录控制器,当用户有效时,可以将其重定向到我的索引页面。重定向有效,但在索引页面上,url仍然是验证方法ex:login / validate_login /。如果我点击索引页面上的链接,然后尝试返回浏览器历史记录,浏览器会指向验证方法,而不是索引页面。

我该如何解决这个问题?

我尝试过使用重定向同时刷新和定位,但两者都没有运气。

我怀疑这是jQuery mobile的ajax调用的问题,但我不确定。

任何帮助表示赞赏。 亲切的问候

注意:我会在索引页面上发布网址图片,但我不允许这样做,因为我是新用户。

我的验证方法:

    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();
        }
    }
}

3 个答案:

答案 0 :(得分:0)

有两种方法可以解决这个问题,它与AJAX无关,就像CI的做法一样。最快捷最简单的方法是改变

$this->index();

redirect(index);

您执行此操作的方式实际上并未重定向,您在当前网址上调用了index_函数,即validate_login。这样做的问题是如果登录失败,它仍将保留在validate_login URL上以供下次尝试。

处理它的最好方法是从控制器中的索引函数调用实际的validate_login函数,而不是表单本身。因此,将表单发送回索引,让索引控制器检查表单数据,如果是,则调用validate_login()。这样你就不会真正离开索引页面,只是处理登录表单是否已经提交。解决URL问题。实际上,我在提交任何类型验证表单的所有页面都这样做。

答案 1 :(得分:0)

要正确更新URL,似乎需要两件事:使用重定向(...)而不是方法调用并禁用jQuery Mobile ajax调用。有两种方法:添加和归属于最初指向您的方法的链接,

<a href='.../validate_login/...' data-ajax='false'>...</a>

或者,通过编辑设置(未测试)全局禁用ajax调用。

答案 2 :(得分:0)

当您通过HTML表单提交(例如登录注册)时,您还需要进行某种仪表板重定向,您需要像这样更新表单标签。这种情况在我使用Codeigniter和jquery mobile使用时会发生 data-ajax =“ false”

func isLeap(year: Int) -> Bool {
    return (year.isMultiple(of: 4) && !year.isMultiple(of: 100))
        || year.isMultiple(of: 400)
}

let aYear = Int(readLine()!)!

if isLeap(year: aYear) {
    print("YES")
} else {
    print("NO")
}