Reputation: 183
I've wrote following code for searching via ajax. When key up fired, an ajax request is made after 500ms. But the searching animation doesn't stop (hide()
method).
$('#mainsearch .searchinput').keyup(function(e) {
if (e.which !== 0) {
var searchval = $(this).val().trim();
if(aSearch[searchval]) {
$('#mainsearch #sugbox #sugres').html(aSearch[searchval]);
}else if(prevs !== searchval) {
prevs = searchval;
clearTimeout($.data(this, 'timer'));
var wait = setTimeout(function() {search(searchval)}, 500);
$(this).data('timer', wait);
}
}
});
function search(searchval) {
console.log("searching for "+searchval)
if(lastrequest && lastrequest.readystate != 4){ // abort past requests
lastrequest.abort();
lastrequest = null;
delete lastrequest;
$('#mainsearch #finding').hide();
}
if(searchval != "") { // make an ajax call
lastrequest = $.ajax({
url:"/ajaxsearch.php?key_word="+searchval,
type: "GET",
dataType:'json',
cache:true,
beforeSend:function() {
$('#mainsearch #finding').delay(400).show(0);
},
complete: function(jqXHR, status){
console.log('complete');
$('#mainsearch #finding').hide();
},
success:function(result){
$('#mainsearch #finding').hide();
if(result.length > 0 ) {
var outp = searchParse(result);
$('#mainsearch #sugbox #sugres').html(outp);
aSearch[searchval] = outp;
} else
$('#mainsearch #sugbox #sugres').html('<li><a href="#"> Not Found </span></a></li>');
$('#mainsearch #finding').hide();
},
error : function (xhr, ajaxOptions, thrownError) {
$('#mainsearch #finding').hide();
}
});
}
}
I get desired results in search with no error. but the hide()
isn't hiding the animation. However, entering $('#mainsearch #finding').hide();
hides the animation.
Note : Here #mainsearch #finding
is a div which is animated by css3.
Upvotes: 2
Views: 353
Reputation: 526
Take away the delay i think ajax returns faster than delay...
$('#mainsearch #finding').delay(400).show(0);
$('#mainsearch #finding').show(0);
Upvotes: 1