1

CI によって開発された、私の Web サイト全体のコメントを処理するコメント ライブラリを作成しました。

私はajaxを使用してコメントを追加しているので、ajaxを処理するMY_Controllerに関数を配置する練習を思いついた

public function comment_add()
    {
        echo $this->comments->add(); 
    }

また、AJAX Jquery コードでは、どのコントローラーも親コントローラーにある comment_add() にアクセスできるため、カテゴリーはコントローラー名の 1 つであることを示しています。

$('#myform').submit(function(e) {

    e.preventDefault();
    dataString=$("#myform").serialize();

  $.ajax({
    type:"POST",
    url: base_url+"snc/category/comment_add",
    data: dataString,
    success: function(data){
        $(data).hide().insertAfter('#inserAfterThis').slideDown('slow');
        $('#comment_new').val('');
        }
    }
  );
});   

そして私のコメントライブラリに

public function add()
    { 
        $post_id=$this->get_post_id();
        $post_type=$this->get_post_type();

        if(!$post_id || !$post_type || !$this->user_id)
            return false;

        $id=$this->ci->comments_model->comment_add($this->user_id,$post_id,$post_type);
        if($id)
        {
            return $this->_markup($id);
        }
        else
            return false;
    }

コメントモデル

function comment_add($user_id,$post_id,$post_type)
{

    $data['comment_user_id']=$user_id;
    $data['comment_post_type']=$post_type;
    $data['comment_post_id']=$post_id;
    $data['comment_text']=$this->input->post('comment_new');

    $this->db->insert('comments', $data);

    if($this->db->affected_rows()>0)
        return $this->db->insert_id();
    else
        return false;

}

問題は、コメントが2回挿入され、データベースにも2回挿入されることです。x -Debuggを使用しても、これを何時間も追跡してきました。彼はエコーを$this->comments->add(); 2回通過することがわかりました。

4

3 に答える 3

1

多分それは2回提出されました。ajax が成功したとき、または単に alet("something") を取得したときに送信のバインドを解除してみてください。そうすれば、その問題が JavaScript ベースなのか PHP ベースなのかがわかります。

submit 関数を次のように置き換えます。

$('#myform').submit(function(e) {
    e.preventDefault();
    dataString=$("#myform").serialize();
    $(this).unbind("submit"); //so you will submit only once

  $.ajax({
    type:"POST",
    url: base_url+"snc/category/comment_add",
    data: dataString,
    success: function(data){
        $(data).hide().insertAfter('#inserAfterThis').slideDown('slow');
        $('#comment_new').val('');
        }
    }
  );
});   
于 2013-02-03T18:20:49.277 に答える
0

Jqueryファイルを2回ロードしたことがわかりました。それは私の悪いことでした。ありがとう

于 2013-02-11T15:19:40.450 に答える
0

ここで欠落している部分は「snc/category/comment_add」コントローラーです...そのコントローラーとMY_Controllerの両方から呼び出していないのですか?

コントローラーコードも投稿できますか?

于 2013-02-03T07:20:42.033 に答える