0

コース名が既に存在するかどうかをデータベースにチェックインするために、ajax を使用したキーアップ機能を利用しました。一致が見つかった後、プロンプトがユーザーに表示されます。モデルで個別のクエリを使用した後、コントローラーは正しい値を ajax に返しますが、返された値が重複しているか、複数の値が返されて、ページにポップアップ メッセージが複数回表示されます。これの何が問題なのですか?助けてくれてありがとう。ここに私のコードがあります

表示 (Javascript):

<script>
var typingTimer;
var doneTypingInterval = 3000;


$('#course_name').keyup(function(){
typingTimer = setTimeout(check_course_name_exist, doneTypingInterval);

});


$('#course_name').keydown(function(){
clearTimeout(typingTimer);

});



function check_course_name_exist()
   {

   var course_name=$("#course_name").val();

    var postData={
    'course_name':course_name
   };


    $.ajax({
        type: "POST",
        url: "<?php echo base_url();?>courses/check_course_name_existince",
        dataType:'json',
        data: postData,
        success: function(data)
        {


        if(data.msg == 'Exist')
        {
         console.log(data.msg);
         $("#alert_exist").fadeIn(100);
         $("#alert_exist").delay(3000).fadeOut(1000);
         var a = 0;
         $("input[type=radio][value=" + a + "]").attr("disabled",true);
         document.getElementById('course_desc').disabled=true;
         document.getElementById('userfile').disabled=true;
         document.getElementById('is_public').disabled=true;
         document.getElementById('submit').disabled=true;


        }

        else
         {
         console.log(data.msg);
         var a = 0;
         $("input[type=radio][value=" + a + "]").attr("disabled",false);
         document.getElementById('course_desc').disabled=false;
         document.getElementById('userfile').disabled=false;
         document.getElementById('is_public').disabled=false;
         document.getElementById('submit').disabled=false;


         }



        }
    });
   </script>

コントローラ:

function check_course_name_existince()
{
$course_name = $this->input->post('course_name');
$session_id = $this->session->userdata('username');
$result = $this->
course_booking_model->check_course_name_exist($session_id,$course_name);

if($result)
    {


        $msg="Exist";
    }
    else
    {

        $msg="Available";
    }


echo json_encode(array('msg'=>$msg));
}

モデル:

function check_course_name_exist($tennant_id,$course_name)
{
  $where = array(

        'tennant_id'  => $tennant_id,
        'course_name' => $course_name

  );
    $this->db->distinct();
    $this->db->select('course_name');
    $this->db->where($where);
    $this->db->group_by('course_name');
    $query=$this->db->get("courses");


  if($query->num_rows()>0)
    {
       return true;
    }
    else
    {
        return false;
    }
}

画像出力:

ここに画像の説明を入力

コンソール ログ機能は 2 つの同一の値を返し、2 つのメッセージ ポップアップが表示されます。

4

1 に答える 1

1

ajax 呼び出しに対する複数のトリガーを防ぐために、新しいタイムアウトを設定する前にいくつかのチェックを追加してみてください

var typingTimer = null;
var doneTypingInterval = 3000;

$('#course_name').keyup(function () {
    if (!typingTimer) {
        typingTimer = setTimeout(check_course_name_exist, doneTypingInterval);
    }

});

$('#course_name').keydown(function () {
    if (typingTimer) {
        clearTimeout(typingTimer);
        typingTimer = null;
    }
});
于 2013-07-29T10:05:09.893 に答える