jquery - 使用 jQuery 发送新的 ajax 请求之前添加延迟

标签 jquery ajax timeout delay

我有一个指向 html 页面的链接列表。

<ul id="item-list">
    <li><a href="assets/data/item1.html">Item 1</a></li> 
    <li><a href="assets/data/item2.html">Item 2</a></li>
    <li><a href="assets/data/item3.html">Item 3</a></li>
    <li><a href="assets/data/item3.html">Item 4</a></li>
</ul>

我有一个 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('<div>'+ data +'</div>')
        }
    });
});

我尝试使用 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('<div>'+ data +'</div>')
            }
           });
        }, 2000
    );
});

如何告诉 jQuery 在悬停时等待(500 毫秒或 1000 毫秒或...),然后再发送新请求?

最佳答案

我认为也许您不应该中止请求,而应该使用变量控制ajax请求,例如,名为processing=false,该变量将重置为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('<div>'+ data +'</div>')
        }
      });
    }
  }, 2000);
});

关于jquery - 使用 jQuery 发送新的 ajax 请求之前添加延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3972911/

相关文章:

timeout - 尝试重新启动 mysqld 后无法再启动它

javascript - jQuery if 条件为两个元素 mouseleave

jquery - 防止单击表中列范围之外的区域

java - 丰富的 :effect usage problem

timeout - 更改 Axis 1.4 生成的 SOAP Java 客户端的超时设置

php - 我可以防止 PDO 中的长查询吗?

java - 为什么我的 jquery ajax 给出 406

jQuery:如何将输入值与 jQuery 中的所有 <td> 元素相匹配?

当我使用模板时,Javascript 函数不起作用

php - Ajax 请求但没有从 PHP 脚本得到答案