You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Backbone.js提交数据后无法跳转至CodeIgniter控制器求助

解决Backbone.js AJAX登录后CodeIgniter无法跳转的问题

你的问题核心在于AJAX请求的特性:Backbone的save()发起的是异步AJAX请求,后端的redirect()只会将跳转指令作为响应返回给AJAX,并不会触发浏览器自动跳转——浏览器仅会在普通同步请求(比如表单直接提交)时遵循redirect指令。

步骤1:修改CodeIgniter后端的loginUser方法

不再直接使用redirect(),而是返回JSON格式的响应,告知前端登录状态与跳转目标:

public function loginUser()
{
    if ($this->input->server('REQUEST_METHOD') == 'POST') {
        $data = $this->decode_data($this->input->raw_input_stream);
        $username = $data['username'];
        $password = $data['password'];
        $this->load->model('UserModel');
        
        if ($this->UserModel->authenticate($username, $password)) {
            $this->session->is_logged_in = true;
            $this->session->username = $username;

            // 返回登录成功的JSON响应
            echo json_encode([
                'status' => 'success',
                'redirect_url' => base_url('/Home/')
            ]);
        } else {
            $this->session->login_error = True;
            // 返回登录失败的JSON响应
            echo json_encode([
                'status' => 'error',
                'redirect_url' => base_url('/User/')
            ]);
        }
        exit; // 确保后续无多余输出,避免JSON解析失败
    }
}

注意:需确保已加载CodeIgniter的url助手,可在config/autoload.php中配置$autoload['helper'] = array('url');,保证base_url()能生成正确URL。

步骤2:修改Backbone前端的authenticate方法

在success回调中解析后端返回的JSON响应,根据状态执行页面跳转:

authenticate: function(event) {
    event.preventDefault(); // 阻止表单默认同步提交行为(若事件绑定在表单submit上)
    var usernameValue = $('#username').val();
    var passwordValue = $('#password').val();
    var c = new MyQuiz();
    var userDetails = {
        'username': usernameValue,
        'password': passwordValue
    }
    c.save(userDetails, {
        type: 'POST',
        url: '/CW2/ASSWDCW2/cw2app/index.php/User/loginUser',
        dataType: 'json', // 指定接收JSON格式响应
        success: function(model, response) {
            if (response.status === 'success') {
                // 跳转到后端指定的首页
                window.location.href = response.redirect_url;
            } else {
                // 登录失败,跳回登录页或提示错误
                window.location.href = response.redirect_url;
                // 也可直接提示:alert('登录失败,请检查用户名或密码');
            }
        },
        error: function(model, response) {
            alert('请求出错,请稍后重试');
        }
    }).done(function(model, response) {
        console.log('请求完成');
    });
}

内容的提问来源于stack exchange,提问作者Kavishka Rajapakshe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:25:21