Jquery ajax验证输入使输入不可写或几乎不可写

Jquery ajax验证输入使输入不可写或几乎不可写,jquery,ajax,Jquery,Ajax,问题 我使用ajax在用户停止写入时验证输入, 基本上这很好, 但当用户想要在ajax还没有完成的时候编写时,它不会让他或它在输入中编写的速度非常慢 这里有一些小提琴: 由于这一行async:false,它将请求更改为同步,浏览器将被冻结,直到响应到来。要修复它,只需删除这一行。然后,您需要从AJAX成功函数返回结果(不是在它之后),但您的代码需要进行深入修改,因为如果请求是异步的,那么您的函数将在响应到来之前返回。这一行有一个关键原因,表单不会被发送,在ajax返回一些东西之前……我知道这一点

问题
我使用ajax在用户停止写入时验证输入,
基本上这很好,
但当用户想要在ajax还没有完成的时候编写时,它不会让他或它在输入中编写的速度非常慢

这里有一些小提琴:


由于这一行
async:false,
它将请求更改为同步,浏览器将被
冻结
,直到响应到来。要修复它,只需删除这一行。然后,您需要从AJAX成功函数返回结果(不是在它之后),但您的代码需要进行深入修改,因为如果请求是异步的,那么您的函数将在响应到来之前返回。

这一行有一个关键原因,表单不会被发送,在ajax返回一些东西之前……我知道这一点,并编写了解释。如果您决定使用同步请求,那么在收到响应之前,您的浏览器将处于冻结状态,这将导致性能问题。还有一种方法可以使整个验证函数保持在setTimeout()内,从而使其异步。我无法做到这一点,我拥有的功能要复杂得多,我在这里发布的只是一个简化的脚本,但至少我知道,问题出在哪里。谢谢。
var myInterval;
var typingTimer;               //timer identifier
var doneTypingInterval = 700;  //time in ms
var doneTypingThis = false;

$('#something').keyup(function(){
    typingTimer = setTimeout(function () {doneTyping('something');}, doneTypingInterval);
    if(!doneTypingThis){
      //some functionality  
    }else {
      doneTyping('something'); 
    }
});

//reset timer
$('#something').keydown(function(){
   clearTimeout(typingTimer);
});

// User finished do something
function doneTyping (input_id) {

                        var txt = '';
                        var xmlhttp = new XMLHttpRequest();
                        xmlhttp.onreadystatechange = function(){
                          if(xmlhttp.status == 200 && xmlhttp.readyState == 4){
                            txt = xmlhttp.responseText;
                          }
                        };
                        xmlhttp.open("GET","catalog/view/javascript/mails.js",true);
                        xmlhttp.send();
                        console.log($.parseJSON(txt));

                        $.ajax({
                            url: 'http://something.com/index.php?route=doesnot/really/matter',
                            type: 'post',
                            async: false,
                            data: 'email=' + $("#"+input_id).val(),
                            dataType: 'json',
                            success: function(json) {
                                if(json == "1") {
                                    ajaxValid = false;
                                }else if(json == "2"){
                                    ajaxValid = false;
                                } else if(json == "0") {
                                    ajaxValid = true;

                                }                               
                            }
                        });
                        return ajaxValid;
}