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;
}