【问题标题】:Jquery redirect not saving codeigniter sessionJquery重定向不保存codeigniter会话
【发布时间】:2011-08-24 19:42:00
【问题描述】:

我有一个注册页面,我想通过 ajax 请求将用户重定向到登录页面。但是,这个特定的 ajax 请求会进行重定向,但不会在 POST 请求后传递会话

 var dataString = 'name='+ name + '&email=' + email1 + '&password=' + password1;
                       //alert (dataString);return false;
                       $.ajax({
                           type: "POST",
                           url: "http://localhost/ci/index.php/login/add/",
                           data: dataString,
                           success: function() {
                            window.location.href = "http://localhost/ci/dashboard";
                                                }
                       });

登录/添加功能通过 POST 请求获取值,然后将这些值放入会话中并进行重定向。在普通的 php/CI 中,如果没有 ajax 请求,同样的事情也会完美地发生。但是,不是通过 ajax 请求发生的。

如果有帮助,这里是 php 代码

    if ($this->input->post("add") == "Sign up") {
        $data_array = array(); //this array contains post data
        $output = $this->user_model->add_new($data_array);
        if($output == TRUE){
                $this->session->set_userdata('logged_in', '1'); 
        }

        $data = array(
                    'name' => form_error('name'), 
        'email' => form_error('email'), 
        'password' => form_error('password')    
        );
        echo json_encode($data);

}

【问题讨论】:

  • 我会说将您的 DataString 更改为实际的 post 语法,例如 data: ({"name":name, "email":email, "password":password}) 假设这些是作为此 ajax 函数可用的 JS 变量收集的。这是一个旁注,而不是解决您的问题。但最终可能会修复它,如果您的值包含那些特殊字符,例如 ' 或 &。
  • @Tumharyyaaden:你不需要在对象周围加上()data: {"name":name, "email":email, "password":password}
  • @Rocket:很高兴知道,所以请仔细检查一下,即使假设您有字符串、JS 变量和/或数组,您仍然可以将 () 排除在外吗?可能是愚蠢的,但我认为添加 () 是“更安全”。
  • @Tumharyyaaden:在对象周围添加() 在 JavaScript 中没有任何作用。 ({a:'a', b: [1,2]}){a:'a', b: [1,2]} 相同。
  • @Rocket:这不是完全正确的(对团体来说确实派上用场),但我明白了。

标签: codeigniter jquery codeigniter-2


【解决方案1】:

The login/add function is taking the values via POST request which then puts these value in session and does a redirect. The same thing is happening perfectly without a ajax request in plain php/CI. But, not happening via ajax request.

这是因为之前您执行synchronous 请求,而使用jQuery ajax 您执行asynchronous 请求(这表示您的javascript 可能会忽略您的PHP 脚本的某些部分)。尝试在您的ajax中添加async参数并将其设置为false

【讨论】:

  • 我只是仔细检查了一下,它在这里工作。可能是发生了 PHP 错误,并导致您的 AJAX 失败...
猜你喜欢
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多