1
問題
我使用Ajax時用戶停止寫入驗證輸入,
基本上能正常工作,
但是當用戶想要寫的時候AJAX未完成,它不會讓他或其寫入這個輸入的速度非常慢。
AJAX驗證輸入,使輸入不可寫入的狀態或難寫
下面是一些小提琴:http://jsfiddle.net/qgnjoLch/
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;
}
這條線有一個重要的原因,形式不會發送,在阿賈克斯之前返回的東西... – JTC 2014-11-21 15:44:16
我知道,我寫了解釋。如果您決定使用同步請求,則會導致您的瀏覽器停止響應,直到出現響應,這會導致性能問題。 – 2014-11-21 15:46:46
還有一種方法可以通過在setTimeout()中保留整個驗證函數來完成異步操作() – 2014-11-21 15:48:49