jQuery+CodeIgniter编辑用户功能异常:无法跳转至更新视图求助
问题分析与解决方案
你当前的核心问题是对AJAX请求的逻辑理解偏差:$.post是异步数据请求,它的作用是从服务器获取数据而非触发页面跳转。控制器加载视图后返回的完整HTML代码,现在只是被你用alert弹出,并没有被渲染到页面上,所以自然看不到更新视图。
以下是两种针对性解决思路:
思路一:直接跳转页面(最简单高效)
如果你的需求是跳转到独立的更新页面,完全没必要用AJAX,直接通过普通链接传递参数即可:
- 修改视图中的a标签:
<td align="center"> <a class="editProfile" href="<?= base_url() ?>index.php/Users/editProfileByID/<?= $row['id'] ?>"> <img src="<?= base_url() ?>images/operations.JPG" width="50" height="50"> </a> </td>
直接把用户ID通过URL路径参数传递,不再依赖rel属性。
- 修改控制器方法:
function editProfileByID($userID) { $whereArray = array('id' => $userID); $data['adminData'] = $this->user_model->get_user_by($whereArray); $data['main_content'] = 'usersViews/editProfile'; $data['page_title'] = 'Edit Profile'; $this->load->view('includes/template', $data); }
通过URL参数接收用户ID,点击链接后直接跳转到带用户数据的更新页面,逻辑简单不易出错。
思路二:AJAX异步加载表单(适合弹窗编辑)
如果需要在当前页面弹窗显示编辑表单,不跳转页面,需处理AJAX返回的HTML内容:
- 添加页面容器:
在页面中新增一个用于存放编辑表单的容器(比如模态框或空div):
<div id="editContainer" style="display: none; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); padding: 20px; background: white; border: 1px solid #ccc;"></div>
- 修改jQuery代码:
$(document).ready(function() { $('.editProfile').click(function(e) { // 阻止a标签默认跳转行为 e.preventDefault(); var id = $(this).attr('rel'); $.post("<?= base_url() ?>index.php/Users/editProfileByID", { id: id }, function(data) { // 将返回的视图HTML插入容器并显示 $('#editContainer').html(data).show(); }); }); });
注意:去掉参数末尾多余的逗号(id: id, → id: id),避免语法错误。
- 调整控制器视图逻辑:
确保usersViews/editProfile视图仅包含表单内容(无需重复公共头部尾部),或者修改模板includes/template,根据场景判断是否加载公共布局。
额外注意点
控制器中的return "success";无效,因为$this->load->view()已经输出了HTML内容,return的内容不会被返回给前端。
内容的提问来源于stack exchange,提问作者Ahmed Hagrasi
相关产品推荐
相关产品推荐

