php - 如何在用户使用 Jquery 输入期间的明显暂停处启动 AJAX 请求?

标签 php javascript jquery ajax

当用户输入某些内容时,我需要使用 AJAX 检查用户输入与数据库中的相应数据,但我无法连续检查用户输入与数据库中的数据,因为这会压垮我的数据库服务器。我只想在用户输入期间的显着/明显/合理的暂停处启动 AJAX 请求。例如,输入光标一两秒没有移动。从用户的 Angular 来看,他认为检查是实时的。如何使用 Jquery 来做到这一点?

为什么我的代码没有按预期工作?

function subjectivecheck(id){
    alert(id);
    var cost=(new Date().getTime() - start.getTime())/1000;
    var value=$('#question'+id).val();
    $.post("subjectivecheck.php?",{val:value, qid:id,time:cost, a_id:"<?php echo $announcementid; ?>"},function(xm){

        switch(parseInt(xm)){
            case 4:
            { $htm='Congrats,you have passed the test.';
                $('#success').css({"color":"green"});
                $('#success').text($htm);
            return; 
            }
            case 1:
            {
            $htm='V';
        $('#sign'+id).css({"color":"green"});
        $('#sign'+id).text($htm);
        break;  
            }
            case 0:{

                 $htm='X';
        $('#sign'+id).css({"color":"red"});
        $('#sign'+id).text($htm);
        break;
            }
            case 3:{
                $('#subjectivequestion').text('You have failed at this announcement.');

                $('#choicequestions').text(" ");
            }
        }

    });

}
var ajaxCallTimeoutID = null;
function subjectivecheckcallback(id){
    if (ajaxCallTimeoutID != null)
    clearTimeout(ajaxCallTimeoutID);

  ajaxCallTimeoutID = setTimeout(subjectivecheck(id), 1000);

}

最佳答案

基本上,您希望在用户上次输入后的某个时间启动 AJAX 调用。如果您使用的是文本框,则可以通过处理 keyup 来完成此操作事件并使用 setTimeout() 安排您的 AJAX 调用。在事件处理程序开始时,您可以检查计划的调用并取消它(因为用户再次开始输入):

var ajaxCallTimeoutID = null;
function doAjax() {
  // Do AJAX call here...
}

$('#myTextbox').keyup(function(ev) {

  if (ajaxCallTimeoutID != null)
    clearTimeout(ajaxCallTimeoutID);

  ajaxCallTimeoutID = setTimeout(doAjax, 300);
});

如果您想对整个表单中的用户输入使用react,那么您只需扩展处理程序处理的事件即可。您可能想要处理 keyup对于文本框、文本区域和选择元素,change对于选择元素,可能是 focus一切。

关于php - 如何在用户使用 Jquery 输入期间的明显暂停处启动 AJAX 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1967899/

相关文章:

php - Mysql按不同和缺失和新的两个日期求和

java - PHP 是否像 Java 一样允许 *.properties 文件?

javascript - 无法在 jQuery 中传递 formData 和其他参数

javascript - 如何用我的下拉列表溢出我的固定页脚

php - SQL 查询未被执行

php - 网站上有现成的埃塞俄比亚日历吗?

javascript - 在移动设备上隐藏复选框的奇怪问题

javascript - 在 Titan Appcelator ios 中实现 otr.js?

javascript - Angular Bootstrap Typeahead - 附加到主体 - 卡住

jQuery 轮播定位问题