【发布时间】: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