Javascript Jquery:在发送json请求之前延迟2秒
下面是我的脚本。这是一个自动建议搜索脚本。问题在于,它通过大量请求渗透到服务器(在每个插入字符之后发送一个请求) 我需要更改脚本,使其在用户完成键入(并插入至少3个字符)后等待2秒钟,然后才向php文件发送请求Javascript Jquery:在发送json请求之前延迟2秒,javascript,jquery,Javascript,Jquery,下面是我的脚本。这是一个自动建议搜索脚本。问题在于,它通过大量请求渗透到服务器(在每个插入字符之后发送一个请求) 我需要更改脚本,使其在用户完成键入(并插入至少3个字符)后等待2秒钟,然后才向php文件发送请求 (function($){ $.fn.fsearch = function(){ var $searchInput = $(this); $searchInput.after('<div id="divResult"></div>'); $result
(function($){
$.fn.fsearch = function(){
var $searchInput = $(this);
$searchInput.after('<div id="divResult"></div>');
$resultDiv = $('#divResult');
$searchInput.focus();
$searchInput.addClass('searchi');
$resultDiv.html("<ul></ul><div id='search-footer' class='searchf'></div>");
$searchInput.keyup(function(e) {
var q=$(this).val();
if(q.length>2&&q.length<30){
var current_index = $('.selected').index(),
$options = $resultDiv.find('.option'),
items_total = $options.length;
$resultDiv.fadeIn();
$resultDiv.find('#search-footer').html("<img src='img/loader.gif' alt='Searching...'/>");
$.getJSON("/search.php",{searchword: q},function(jsonResult) {
var str='';
for(var i=0; i<jsonResult.length;i++)
{
str += '<li id=' + jsonResult[i].uid + ' class="option"><img class="profile_image" src="photos/'+jsonResult[i].media+'" alt="'+jsonResult[i].username+'"/><span class="name">' + jsonResult[i].username + '</span><br/>'+jsonResult[i].country+'</li>';
}
$resultDiv.find('ul').empty().prepend(str);
$resultDiv.find('div#search-footer').text(jsonResult.length + " results found...");
$resultDiv.find('ul li').first().addClass('selected');
});
$resultDiv.find('ul li').live('mouseover',function(e){
current_index = $resultDiv.find('ul li').index(this);
$options = $resultDiv.find('.option');
change_selection($options,current_index);
});
function change_selection($options,current_index){
$options.removeClass('selected');
$options.eq(current_index).addClass('selected');
}
} else{
$resultDiv.hide();
}
});
jQuery(document).live("click", function(e) {
var $clicked = $(e.target);
if ($clicked.hasClass("searchi") || $clicked.hasClass("searchf")){
}
else{
$resultDiv.fadeOut();
}
});
$searchInput.click(function(){
var q=$(this).val();
if(q.length>2&&q.length<30) {
$resultDiv.fadeIn();
}
});
$resultDiv.find('li').live("click",function(e){
var id = $(this).attr('id');
var name = ($(this).find('.name').text());
$searchInput.val(name);
});
};
})(jQuery);
不幸的是,它不起作用:
TypeError: e.nodeName is undefined jquery-1.11.0.min.js:4:9004
哪一行抛出这个错误?请注意,在setTimeout回调中,默认上下文是window对象。也许可以尝试:
timer=setTimeout(function(){//assign timer一个新的超时x=$.getJSON(…);//运行ajax请求并存储在x变量中(这样我们就可以取消)}.bind(this),2000)代码>但我仍然不确定您在超时回调中设置了什么?只有ajax请求还是什么?请考虑升级您的jQuery版本,避免使用<代码> LIVER()>代码>方法。我看到的一个潜在问题是<代码>(x){x.abt()(<代码> > -应该是<代码>(x){x.abter();x= null;}…不过,我不认为这不是问题所在
TypeError: e.nodeName is undefined jquery-1.11.0.min.js:4:9004