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 に追加され、「送信」および「キャンセル」ボタンとともに「表示」されます。SO 現在、ユーザーには元の情報の下にテキスト フィールドがあり、2 つの新しいボタンがあります。

$('.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はこちら。ご覧のとおり、送信ボタンから遠く離れたフォームで送信イベントをトリガーして、「リモートコントロール」でフォームを送信しようとしています。そして、submit イベントで、Default を防止してから、情報を AJAX コントローラーに $.post しようとします。

$('.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に戻して警告しています..しかし、何も編集されていません。情報に変更はありません。率直に言って、「true」が返されたことに驚いています(リモート送信全体..「これはうまくいかない」と思いました)..しかし、それは何が悪いのかを理解するのを難しくしています.

アイデア?

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 == 'success') の前にアラート データを試して、プロファイル編集機能が何を返しているかを確認してください。

于 2012-11-20T01:45:35.510 に答える