CodeIgniter 3中Ajax无法请求upload.php文件问题求助
解决Ajax提交无响应问题
在CodeIgniter框架中,直接访问独立的upload.php文件不符合框架路由规则,这就是你遇到提交无响应的核心原因,按以下步骤修改即可解决:
在控制器中新增上传处理方法
放弃使用独立的upload.php,在加载import.php视图的对应控制器(比如Admin_importexport)里添加handle_upload方法,专门接收并处理Ajax提交的请求:public function handle_upload() { // 这里编写文件上传逻辑,可使用CI自带的上传类 // 示例:加载上传类并配置参数 $this->load->library('upload'); $config['upload_path'] = './uploads/'; $config['allowed_types'] = 'csv|xls|xlsx'; $this->upload->initialize($config); // 处理上传并返回JSON响应 if ($this->upload->do_upload('your_file_field')) { echo json_encode(['status' => 'success', 'data' => $this->upload->data()]); } else { echo json_encode(['status' => 'error', 'msg' => $this->upload->display_errors()]); } exit; }修改Ajax请求的目标地址
在import.php的Ajax脚本里,将请求URL改为控制器方法的路由地址,示例如下:$.ajax({ url: '/admin/importexport/handle_upload', // 若开启index.php则改为/index.php/admin/importexport/handle_upload type: 'POST', data: new FormData($('#your-form-id')[0]), contentType: false, processData: false, success: function(res) { console.log(res); // 处理成功响应 }, error: function(xhr) { console.log(xhr.responseText); // 排查错误信息 } });处理CSRF防护(若开启)
如果你的CI配置中开启了CSRF保护($config['csrf_protection'] = TRUE;),需要在Ajax请求中携带CSRF令牌:- 在视图头部添加令牌元标签:
<meta name="csrf-token" content="<?php echo $this->security->get_csrf_hash(); ?>"> - 在Ajax请求中加入头部信息:
headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') },
- 在视图头部添加令牌元标签:
验证路由可达性
可以先在handle_upload方法中写入简单输出:echo "test"; exit;,然后直接在浏览器访问该路由地址,确认是否能返回内容,以此验证路由配置是否正确。
内容的提问来源于stack exchange,提问作者Marcin
相关产品推荐
相关产品推荐

