Tôi đang cố trì hoãn yêu cầu AJAX sao cho nó được gửi đi 2-3 giây sau khi khóa LAST của ô nhập.
Cho đến nay tôi đã quản lý để trì hoãn các yêu cầu, nhưng sau 2-3 giây, tôi nhận được một yêu cầu được gửi cho mọi khóa ...
Làm cách nào để jQuery có thể hủy các yêu cầu đầu tiên và chỉ gửi khóa cuối cùng?
Dưới đây là đoạn mã cho đến nay:Cố gắng thêm thời gian trễ vào yêu cầu jQuery AJAX
$('#lastname').focus(function(){
$('.terms :input').val(""); //clears other search fields
}).keyup(function(){
caps(this); //another function that capitalizes the field
$type = $(this).attr("id"); // just passing the type of desired search to the php file
setTimeout(function(){ // setting the delay for each keypress
ajaxSearchRequest($type); //runs the ajax request
}, 1000);
});
Mã này trên, đợi 1 giây sau đó gửi 4-5 yêu cầu AJAX tùy thuộc vào bấm phím. Tôi chỉ muốn được gửi sau keyup
Tôi đã tìm thấy một số giải pháp tương tự trong StackOverflow sử dụng Javascript, nhưng tôi không thể triển khai chúng cho dự án của mình do kiến thức lập trình nhỏ của tôi.
[SOLVED] mã làm việc cuối cùng, nhờ @ Dr.Molle:
$('#lastname').focus(function(){
$('.terms :input').val("");
}).keyup(function(){
caps(this);
$type = $(this).attr("id");
window.timer=setTimeout(function(){ // setting the delay for each keypress
ajaxSearchRequest($type); //runs the ajax request
}, 3000);
}).keydown(function(){clearTimeout(window.timer);});
Dưới đây là đoạn code ajaxSearchRequest
:
function ajaxSearchRequest($type){
var ajaxRequest2; // The variable that makes Ajax possible!
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest2 = new XMLHttpRequest();
}catch (e){
// Internet Explorer Browsers
try{
ajaxRequest2 = new ActiveXObject("Msxml2.XMLHTTP");
}catch (e) {
try{
ajaxRequest2 = new ActiveXObject("Microsoft.XMLHTTP");
}catch (e){
// Something went wrong
alert("Browser error!");
return false;
}
}
}
ajaxRequest2.onreadystatechange = function(){
if(ajaxRequest2.readyState == 4){
$result = ajaxRequest2.responseText;
$('#resultcontainer').html($result);
}}
var searchterm = document.getElementById($type).value;
var queryString ="?searchterm=" + searchterm +"&type=" +$type;
if(searchterm !== ""){
ajaxRequest2.open("GET", "searchrequest.php" +
queryString, true);
ajaxRequest2.send(null);
}
}
đăng mã của 'ajaxSearchRequest' – Imdad
@Imdad tại sao lại cần thiết? Bạn đã có thể thấy mỗi lần đăng ký thực hiện một thời gian chờ mới mà không hủy các lần trước đó. – Esailija
Có các công việc khác xung quanh. Tôi chỉ có thể biết liệu tôi có biết chức năng này là – Imdad