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

gea*_*tal 7 ajax jquery 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>
Run Code Online (Sandbox Code Playgroud)

我有一个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>')
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用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
    );
});
Run Code Online (Sandbox Code Playgroud)

在发送新请求之前,如何告诉jquery在悬停时等待(500ms或1000ms或...)?

net*_*tos 8

我认为也许不是中止请求,你应该processing=false在成功/错误函数中用一个变量控制ajax请求,例如,被调用的变量.然后你只能在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);
});
Run Code Online (Sandbox Code Playgroud)