私は最初の 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」が返されたことに驚いています(リモート送信全体..「これはうまくいかない」と思いました)..しかし、それは何が悪いのかを理解するのを難しくしています.
アイデア?