0

我正在进行我的第一个 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 以提醒......但没有任何内容被编辑。信息没有变化。坦率地说,我很惊讶我什至得到了“真实”的回复(整个远程提交的事情......我认为“这不可能”)......但这使得很难看出出了什么问题。

想法?

4

1 回答 1

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; 
}

并且在

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') 之前尝试警报数据,以查看配置文件编辑函数返回的内容。

于 2012-11-20T01:45:35.510 回答