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 回答