在使用jquery发送新的ajax请求之前添加延迟
我有一个指向html页面的链接列表。
我有一个javascript(jquery),并将html附加到我的文档中。
var request; $('#item-list a').live('mouseover', function(event) { if (request) request.abort(); request = null; request = $.ajax({ url: $(this).attr('href'), type: 'POST', success: function(data) { $('body').append(''+ data +'') } }); });
我曾尝试使用setTimeout()但它不能像我所预期的那样工作。
var request, timeout; $('#item-list a').live('mouseover', function(event) { timeout = setTimeout(function(){ if (request) request.abort(); request = null; request = $.ajax({ url: $(this).attr('href'), type: 'POST', success: function(data) { $('body').append(''+ data +'') } }); }, 2000 ); });
在发送新请求之前,如何告诉jquery在hover时等待(500ms或1000ms或…)?
我认为也许不是在中止请求,而是应该在成功/错误函数中使用变量(例如,称为processing=false
)来控制ajax请求,该变量将被重置为false。 然后,如果处理为false,则只能在setTimeout中执行该函数。
就像是:
var request, timeout; var processing=false; $('#item-list a').live('mouseover', function(event) { timeout = setTimeout(function() { if (!processing) { processing=true; request = $.ajax({ url: $(this).attr('href'), type: 'POST', success: function(data) { processing=false; $('body').append(''+ data +'') } }); } }, 2000); });
$.fn.extend( { delayedAjax: function() { setTimeout ($.ajax, 1000 ); } }); $.fn.delayedAjax();
似乎工作,但可能不是最漂亮的解决方案。 此外,如果需要,您需要添加一些代码来传递args和超时值
如果你愿意的话,你需要有一个可以作为倒数计时器的变量,一个mouseout事件也会被取消…
$(function(){ $("#item-list a").live("mouseover",function(){ var a = $(this); a.data("hovering","1"); setTimeout(function(){ if (a.data("hovering") == "1") { // this would actually be your ajax call alert(a.text()); } }, 2000); }); $("#item-list a").live("mouseout",function(){ $(this).data("hovering","0"); }); });
这对我有用……
$(show_id).animate({ opacity: 0 }, 5000, function() { $(show_id).html(data) });