我正在进行我的第一个 CI 项目,并且我正在尝试基本上进行 AJAX“就地编辑”。
我有一个包含多个字段的用户个人资料页面。基本上用户正在查看他自己的数据,我想给他一个选项来逐个字段地编辑他的信息。我有大约20个这样的领域..
<div id="desc_short">
<div class="old_info"><p><?php echo $the_user->desc_short; ?></p></div>
<div class="edit_buttons">
<button type="button" class="btn_edit">Edit Field</button>
<button type="button" class="btn_submit">Submit Change</button>
<button type="button" class="btn_cancel">Cancel</button>
</div>
提交和取消按钮以 display:none 开头。单击“编辑”按钮会在 div 中附加一个表单,其中包含一些隐藏字段信息,并“显示”以及“提交”和“取消”按钮。所以现在用户在原始信息下有一个文本字段,还有两个新按钮。
$('.btn_edit').on('click', function(){
var this_field_id = $(this).parent().parent().attr('id');
var form_HTML = "<form action='edit_profile' method='post'><input type='text' class='new_info' name='new_info'/><input type='hidden' class='edit_field' name='edit_field' value='"+this_field_id+"'/></form>";
$("#"+this_field_id).append(form_HTML).hide().show(500);
$(this).siblings().fadeIn(1000);
});
所以我动态地将表单添加到适当的 div 中,并给它一个隐藏字段,其中包含正在编辑的数据字段的名称。我还展示了“提交”和“取消”按钮(尽管请注意提交按钮不在表单元素中)。
我将省略“取消按钮”功能,但这里是提交按钮 jquery。如您所见,我正在尝试通过“远程控制”提交表单,在距离提交按钮很远的表单上触发提交事件。然后在提交事件上,我 preventDefault 然后尝试 $.post 信息到 AJAX 控制器..
$('.btn_submit').on('click', function(){
var this_field_id = $(this).parent().parent().attr('id');
var new_info = $("#"+this_field_id+" .new_info").val();
alert(this_button);
$("#"+this_field_id+" form").trigger('submit');
$("#"+this_field_id+" form").submit(function(e){
e.preventDefault();
alert(this_field_id); // alerting correctly
$.post('../ajax/profileEdit', { edit_field: this_field_id , new_info: new_info },
function(data){
if(data = 'true')
{
alert(data); // <<<< alerts "true"
}
else
{
alert("bad");
}
}
);
});
});
这是ajax控制器
public function profileEdit()
{
$ID = $this->the_user->ID;
$field = $this->input->post('edit_field');
$new_info = $this->input->post('new_info');
$this->load->model('Member_model');
$result = $this->Member_model->edit_profile( $ID, $field, $new_info );
echo $result;
}
还有模特。。
public function edit_profile($ID, $field, $new_info)
{
$statement = "UPDATE users SET $field=$new_info WHERE UID=$ID"
$query = $this->db->query($statement);
return $query;
}
我实际上将“TRUE”返回给 Jquery 以提醒......但没有任何内容被编辑。信息没有变化。坦率地说,我很惊讶我什至得到了“真实”的回复(整个远程提交的事情......我认为“这不可能”)......但这使得很难看出出了什么问题。
想法?