【问题标题】:Prevent New Request While fetching previous request in jQuery在 jQuery 中获取上一个请求时阻止新请求
【发布时间】:2009-07-16 02:38:47
【问题描述】:

我想在浏览器获取先前请求时如何防止新的 ajax 请求! 我创建了一个包含这样的数据表的系统:

col1 | col2 | col3 数据1|数据2|数据3

当用户将鼠标悬停在数据字段上时,我使用 Ajax 来检索有关鼠标悬停事件数据的更多信息,但是如果用户快速移动他/她的数据列光标,则会创建多个请求。我该如何预防?

【问题讨论】:

    标签: jquery ajax


    【解决方案1】:

    我认为你可以缓存 jquery ajax 请求对象,然后再中止它。

    var xhr = $.ajax({...});
    
    xhr.abort();
    

    【讨论】:

    • 目的是防止,而不是中止。
    【解决方案2】:

    Ben Nadel 有一个很好的模式来处理 AJAX 错误,包括检查相同类型的多个请求。

    His blog post 可以帮到你。

    【讨论】:

    • 这是个好主意,但它并不能解决我的解决方案 :) 坦克!
    【解决方案3】:

    在您的情况下,您需要在鼠标悬停和 AJAX 请求之间稍作延迟。首先为 AJAX 请求执行 setTimeout。如果在此超时期间再次发出鼠标悬停,请清除超时并设置新的超时。

    这是一个简化版本(假设您使用相同的函数 cell_onmouseover 作为所有元素的处理程序。

    var timeoutId = null; //Should be visible to both functions.
    function cell_onmouseover()
    {
        if (timeoutId)
        {
            clearTimeout(timeoutId);
            timeoutId = null;
        }
        timeoutId = setTimeout(callAJAX, 500); //half a second delay.
    }
    
    function callAJAX()
    {
        //dostuff
    }
    

    [编辑]:您还可以增强它以在用户将鼠标悬停在新元素上时中止正在进行的 AJAX 调用。

    【讨论】:

      猜你喜欢
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多