CodeIgniter中AJAX表单验证后重定向至控制器的实现问题
解决AJAX登录验证成功后跳转到CodeIgniter控制器方法的问题
嘿,我来帮你搞定这个跳转的难题!你之前尝试用$("form").submit()无效,大概率是因为表单没有设置正确的action属性,导致提交没有目标地址。下面给你几种靠谱的实现方式:
方法1:直接用window.location.href跳转(最简单直接)
在AJAX成功的else分支里,直接跳转到CodeIgniter的setCredentials方法对应的URL就行。记得替换成你实际的控制器名称:
else { // 跳转到setCredentials控制器方法,替换"YourController"为你的控制器名 window.location.href = "<?php echo base_url('YourController/setCredentials'); ?>"; }
注意:要确保你已经在CodeIgniter的配置文件里正确设置了
base_url,否则跳转路径会出错。
方法2:修改表单的action属性后再提交
如果想保留表单提交的方式,可以先给表单设置正确的action,再调用submit():
else { // 设置表单的提交目标为setCredentials方法 $("form").attr("action", "<?php echo base_url('YourController/setCredentials'); ?>"); // 提交表单 $("form").submit(); }
这种方式适合需要携带表单数据到setCredentials方法的场景,不过如果你的verify接口已经完成了验证,可能不需要再传一次数据,可根据业务需求选择。
方法3:后端返回跳转地址(更灵活)
可以让你的verify接口在验证成功后,返回包含跳转URL的JSON数据,前端再根据这个URL跳转:
后端(CodeIgniter的verify方法)示例:
// 验证成功后 echo json_encode([ 'status' => 'success', 'redirect_url' => base_url('YourController/setCredentials') ]); exit;
前端AJAX修改:
success: function(e) { console.log(e); if(e.status !== 'success') { $("#error").text("Invalid Login Credentials!"); $("#error").css("color","red"); setTimeout(function(){ $("#error").text("Sign in to start your session!"); $("#error").css("color","black"); },3000); } else { // 根据后端返回的地址跳转 window.location.href = e.redirect_url; } }
这种方式更灵活,比如后续要修改跳转地址,只需要改后端就行,不用动前端代码。
额外提醒
- 确保
setCredentials控制器方法已经正确定义,并且没有被权限拦截(比如需要登录才能访问,但这里是登录成功后的跳转,要确保逻辑通顺)。 - 如果你的CodeIgniter开启了CSRF保护,记得在AJAX请求里带上CSRF令牌,避免请求被拦截。
内容的提问来源于stack exchange,提问作者Alexander Baltazar
相关产品推荐
相关产品推荐

