登录
首页 >  Golang >  Go问答

如何中断正在进行的请求并处理新请求?

来源:stackoverflow

时间:2024-02-23 21:06:24 354浏览 收藏

今天golang学习网给大家带来了《如何中断正在进行的请求并处理新请求?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

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

  1. 链接被点击
  2. 内容 div 已清空
  3. 根据单击的链接对 API 端点进行 ajax 调用
  4. 将包含 jquery 模板的标记附加到内容 div
  5. 将结果数据应用到模板

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

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

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

创建一个请求通道,将传入的请求与上下文一起排队。排队后,检查通道的长度,如果有多个请求,则遍历通道并调用每个请求的上下文取消函数,除了最后一个排队的请求。

此外,处理程序现在是全局的,因此我认为还需要与客户端协商 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
    }
});

到这里,我们也就讲完了《如何中断正在进行的请求并处理新请求?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>