Estoy intentando retrasar una solicitud AJAX para que se envíe 2-3 segundos después de la última activación de una celda de entrada.
Hasta ahora he logrado retrasar las solicitudes, pero después de 2-3 segundos recibo una solicitud para cada keyup en el campo ...
¿Cómo puedo hacer que jQuery cancele los primeros y simplemente envíe la última clave?
Aquí está el código hasta ahora:Intentando agregar demora a jQuery Solicitud 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);
});
Este código anterior, espera 1 seg a continuación, envía 4-5 peticiones AJAX dependiendo de las pulsaciones de teclas. Solo quiero una enviada después de la última keyup
He encontrado algunas soluciones similares en StackOverflow que usan Javascript, pero no he podido implementarlas en mi proyecto debido a mi pequeño conocimiento de programación.
[SOLUCIONADO] código de trabajo final, gracias a @ 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);});
Aquí está el código 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);
}
}
publique el código de 'ajaxSearchRequest' – Imdad
@Imdad ¿por qué es necesario? Ya puede ver cada tecla haciendo un nuevo tiempo de espera sin cancelar las anteriores. – Esailija
Hay otro trabajo alrededor. Solo puedo decir si sé cuál es la función – Imdad