我正在进行我的第一个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。正如您所看到的,我正在尝试通过“远程控制”提交表单,在距离提交按钮很远的表单上触发提交事件。然后在提交事件中,我阻止默认,然后尝试将.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;
}
我实际上回到Jquery“TRUE”以提醒......但是没有任何内容被编辑。没有改变信息。坦率地说,我很惊讶我甚至得到'真正的'回来(整个远程提交的东西......我认为“这不行”)但是这很难看出出了什么问题。
想法?
答案 0 :(得分:1)
除了if(data ='true)错误之外,我看不出其他错误可能在哪里。 当您提醒数据时,它会向您显示什么? 在模型中尝试这个;
public function edit_profile($ID, $field, $new_info)
{
$data = array('field_table' => $field, 'new_info_table' => $new_info);
return ($this->db->where('UID',$ID)->update('tabel_name',$data)) ? TRUE : FALSE;
}
AND in
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');
if($this->Member_model->edit_profile( $ID, $field, $new_info )){
echo 'success';
}else{
echo 'error';
}
}
然后
$('.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 == 'success')
{
alert(data); // <<<< alerts "true"
}
else if(data == 'error')
{
alert('Database error');
}
else{
alert('');
}
}
);
});
});
刚刚在这里写了,所以我还没有测试过。但试一试,至少你可能知道错误的来源。如果仍然遇到相同的错误,请在if(data =='sucess')之前尝试提醒数据,以查看配置文件编辑功能返回的内容。