jquery之如果有新请求进来,如何取消进行中的请求

Free-Thinker 阅读:62 2025-06-02 22:19:02 评论:0

我正在使用 Go 创建一个 API 并提供一个带有侧边栏链接的单页网站,单击这些链接时,会更新屏幕中心的主要内容区域。流程是:

  • 链接被点击
  • 内容 div 已清空
  • 对 API 端点的 ajax 调用取决于单击的链接
  • 将包含 jquery 模板的标记附加到内容 div
  • 将结果数据应用到模板

  • 只要用户等待内容加载(以毫秒为单位)就可以正常工作,但将来可能会有更长时间的请求。如果用户能够非常快速地单击将加载不同内容的多个链接,以便多个 ajax 请求正在进行中,那么生成的内容不是确定性的,因为 jquery 正在清除和附加来自多个请求的标记。您会从两个请求的结果中看到混合内容。

    我只想处理最新的请求。如果用户单击链接一,然后在请求一仍在进行中时单击链接二,则应取消请求一,只处理请求二。

    我认为这应该在服务器上处理,但不知道如何开始。以下是正确的方法吗?

    建立一个请求 channel 来对带有上下文的传入请求进行排队。排队后,检查 channel 的长度,如果它有多个请求,则在 channel 上进行范围并调用每个请求的上下文取消函数,除了最后一个排队的请求。

    此外,处理程序现在是全局的,所以我认为还需要与客户端协商 ID 或让客户端生成 ID,以便服务器知道要取消哪些客户端请求。

    请您参考如下方法:

    根据评论,这将在客户端处理,例如:

     var currentRequest = null;     
     
    currentRequest = jQuery.ajax({ 
        type: 'POST', 
        data: 'value=' + text, 
        url: 'AJAX_URL', 
        beforeSend : function()    {            
            if(currentRequest != null) { 
                currentRequest.abort(); 
            } 
        }, 
        success: function(data) { 
            // Success 
        }, 
        error:function(e){ 
          // Error 
        } 
    }); 
    


    标签:jquery
    声明

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    关注我们

    一个IT知识分享的公众号