jQuery AJAX 轮询 JSON 响应,根据 AJAX 结果或 JSON 内容进行处理

2024-03-28

我是一名初级到中级 JavaScript/jQuery 程序员,因此非常感谢具体/可执行的示例。

我的项目需要使用 AJAX 轮询返回 JSON 的 URL,其中包含要添加到 DOM 的内容或消息{“状态”:“待处理”}这表明后端仍在生成包含内容的 JSON 响应。这个想法是,对 URL 的第一个请求触发后端开始构建 JSON 响应(然后缓存),后续调用检查此 JSON 是否准备好(在这种情况下提供)。

在我的脚本中,我需要以 15 秒的间隔(最多 1 分 30 分)轮询此 URL,并执行以下操作:

  • 如果 AJAX 请求导致错误,则终止脚本。
  • 如果AJAX请求成功,并且JSON内容包含{“状态”:“待处理”},继续轮询。
  • 如果 AJAX 请求成功,并且 JSON 内容包含可用内容(即除{“状态”:“待处理”}),然后显示该内容,停止轮询并终止脚本。

我尝试了一些方法,但效果有限,但我感觉它们都比需要的更混乱。这是我成功使用的一个骨架函数,一次发出一个 AJAX 请求,如果我从 JSON 响应中获取可用内容,该函数就会完成其工作:

// make the AJAX request
function ajax_request() {
  $.ajax({
    url: JSON_URL, // JSON_URL is a global variable
    dataType: 'json',
    error: function(xhr_data) {
      // terminate the script
    },
    success: function(xhr_data) {
      if (xhr_data.status == 'pending') {
        // continue polling
      } else {
        success(xhr_data);
      }
    },
    contentType: 'application/json'
  });
}

但是,此函数目前不执行任何操作,除非它收到包含可用内容的有效 JSON 响应。

我不知道在评论中该怎么做。我怀疑另一个函数应该处理轮询,并调用 ajax_request() 根据需要,但我不知道ajax最优雅的方式_request() 将其结果传达回轮询函数,以便它可以做出适当的响应。

很感谢任何形式的帮助!如果我可以提供更多信息,请告诉我。谢谢!


您可以使用简单的超时来递归调用 ajax_request。

success: function(xhr_data) {
  console.log(xhr_data);
  if (xhr_data.status == 'pending') {
    setTimeout(function() { ajax_request(); }, 15000); // wait 15 seconds than call ajax request again
  } else {
    success(xhr_data);
  }
}

在那条线周围进行计数器检查,您就获得了最大数量的民意调查。

if (xhr_data.status == 'pending') {
  if (cnt < 6) {
    cnt++;
    setTimeout(function() { ajax_request(); }, 15000); // wait 15 seconds than call ajax request again
  }
}

除非您想发出警报或执行其他操作,否则您不需要在错误函数中执行任何操作。一个简单的事实是,它的错误将阻止成功函数被调用并可能触发另一次轮询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery AJAX 轮询 JSON 响应,根据 AJAX 结果或 JSON 内容进行处理 的相关文章

  • JavaScript 中的 Promise.all:如何获取所有 Promise 的解析值?

    我编写了以下node js文件 var csv require csv parser var fs require fs var Promise require bluebird var filename devices csv var d
  • 如何使用 jquery 从 iframe 内部滚动?

    我正在使用一个 Shadowbox 它生成一个 iframe 以在页面上显示产品详细信息 由于详细信息页面可能相当长 因此客户端需要一个 更多 按钮来向下滚动页面 显然 iframe 右侧的滚动条还不够 这是我为了让 iframe 滚动而尝
  • 如何使用text()函数插入html文本? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要更改包含 html 的元素的内容 我尝试过这个 但是 html 标签被打印了 content sections label text
  • 是否可以用 json 进行表达式/计算?

    我使用出色的 json server 作为应用程序的后端 它对于访问自定义端点以检索一些数据非常有用 但是如果它允许我进行计算 表达式以便我也可以模仿后端行为 那将会非常有用 以这个数据结构为例 products name football
  • Angular 2 最终版本路由器单元测试

    如何使用 karma 和 jasmine 对 Angular 2 0 0 版中的路由器进行单元测试 这是我的旧单元测试在版本 2 0 0 beta 14 中的样子 import it inject injectAsync beforeEac
  • 如何最好地实现多个重叠元素的翻转和推出事件?

    Problem 我正在开发一个网站 其中有一个 拨号盘 显示代表伞式公司不同部门的多个选项卡 目前我已经用 HTML CSS 准备好了一切 每个选项卡的定位 内圈处于较高位置z index因为选项卡在滚动时需要向外动画 我可以实现这部分 选
  • 在 NPM 上捆绑并发布客户端 Web 代码

    我制作了一个 JavaScript 文件 假设它的内容是这样的 let myCoolAlert str gt alert str in a different js file SO doesn t allow you to cross fi
  • 避免 AngularJS 部分视图在 IE 中缓存

    我正在开发一个 ASP NET MVC 应用程序 它也有一些 angularJS 我有一个主页 其中有不同的选项卡 当您单击它们时 它们会加载角度部分视图 主页是这样的 div class widget div div class widg
  • 将服务连接到现有的流星帐户

    我正在设置一个流星应用程序 其中涉及使用用户名和密码进行注册 然后希望将该帐户与 Facebook 和 Twitter 连接起来 我只需使用帐户包即可轻松启动并运行第一部分 但是当我有一个登录用户调用 Meteor loginWithFac
  • 如何在流程图中间隔刻度线?

    我下面有一个流程图 您将看到标签被压缩 我想使刻度之间的宽度确保显示所有标签 标记如下 div div class graph info a href span span a a href class active span span a
  • 使用 keyup 事件仅触发表单验证中文本框的部分规则,并取消其余规则的事件

    我的应用程序中有一个表单 我正在使用 jQuery 表单验证插件对其进行验证 其中一项规则是远程类型 用于验证用户名是否不存在 我已经能够覆盖 onkeyup 事件 因此规则不会为我输入的每个字母发送到服务器 我完成的方式如下 var va
  • Scala 2.10,它对 JSON 库和案例类验证/创建的影响

    显然 在 Scala 2 10 中我们得到了改进的反射 这将如何影响 lift json jerkson sjson 和朋友 此外 我们能否期望在不久的将来 Scala 中会出现内置的 JSON 语言功能 如 Groovy 的出色 GSON
  • ERR_IMPORT_ASSERTION_TYPE_MISSING 用于导入 json 文件

    这段代码运行良好 我不知道是因为我升级到 Node 17 还是什么原因 但现在我明白了 TypeError ERR IMPORT ASSERTION TYPE MISSING Module file Users xxxxx code pro
  • 如何在 svelte 中制作搜索过滤器

    我有两个组件在组件树中距离很远 我对如何在两者之间进行通信存有疑问 我有搜索组件 listItems 和商店 商店 svelte
  • 条件顺序仅在 init AngularJS 上执行

    如何在视图初始化时仅运行 orderBy 过滤器一次 我不希望我的列表在运行时被重新排序 li li 使用 orderBy 作为控制器中的过滤器 app controller DemoCtrl scope filter function s
  • JS中如何过滤多个字符串? [复制]

    这个问题在这里已经有答案了 我希望能够过滤数组中的多个字符串 类型 例如我想过滤类型meat并输入fruit在下面的数据结构中 我想要实现的是过滤数据对象 const data type meat food hamburger type f
  • JavaScript 右移负数

    这是片段 var i 101 console log 101 i toString 2 console log 101 gt gt 1 i gt gt 1 toString 2 var l 101 console log 101 l toS
  • addEventListener keydown 不起作用

    我在互联网上找到了一些基本的 Pong 代码 并尝试添加按键 代码在这里 http cssdeck com labs ping pong game tutorial with html5 canvas and sounds http css
  • 将元素添加到 D3 圆包节点

    我正在尝试制作一个可缩放的圆形包装图 我希望每个子圆圈包含一个较小的图表 该图表始终具有相同的结构 即 4 列 只有条形的高度会改变 我尝试添加一个简单的rect到目前为止我的图表 但矩形没有添加到圆圈中并且是静态的 JS var marg
  • 截断段落前 100 个字符并隐藏段落的其余内容,以通过更多/更少链接显示/隐藏其余内容

    我有一个超过 500 个字符的段落 我只想获取最初的 100 个字符并隐藏其余部分 我还想在 100 个字符旁边插入 更多 链接 单击更多链接时 整个段落应显示并编辑文本 更多 到 更少 单击 更少 时 它应切换行为 段落是动态生成的 我无

随机推荐

  • 本机 KDE 查找 Qt 5 应用程序

    我在 Kubuntu 12 10 Linux 机器上安装了 Qt5 和 Qt4 并注意到以下内容 使用 Qt4 编译的程序具有原生 KDE 外观和感觉 我使用默认的 KDEOxygen主题 我的程序也是如此 注意带有标题的平滑渐变和聚焦小部
  • C#:有什么方法可以发现文件使用的字符集编码吗?

    有什么方法可以发现文件使用的字符集编码吗 可靠地做到这一点的唯一方法是寻找字节顺序标记 http en wikipedia org wiki Byte order mark在文本文件的开头 此 blob 更一般地表示所使用的字符编码的字节顺
  • 实现3d索贝尔算子

    我目前正在研究从包含体素的 MRI 数据量中去除不均匀性 我想在这些体积上应用索贝尔运算符来找到梯度 我熟悉二维索贝尔掩模和二维图像的邻域 索贝尔面具 1 2 1 0 0 0 1 2 1 1 0 1 2 0 2 1 0 1 x y 的邻域
  • Websocket 标头丢失

    我正在 Rails 3 2 13 中使用 faye gem 在开发过程中 我在 localhost 9292 上运行 faye 在 localhost 3000 上运行我的应用程序 我可以使用命令行中的curl 请求激活弹出窗口 但无法从应
  • 未找到 React 应用程序的 GitHub Pages 页面

    我正在尝试将我的单页网站发布到 github 页面 但遇到了问题 当我转到网站链接时 出现 404 错误并显示以下消息 找不到文件 此地址配置的站点不包含请求的文件 如果这是您的站点 请确保文件名大小写正确匹配 URL 对于根 URL 例如
  • 如何显示wordpress中的所有类别?

    我使用了这段代码 categories wp get post categories get the ID foreach categories as category echo div class col md 4 a href get
  • python topN 最大堆,使用 heapq 还是自己实现?

    python中有heapq 用于一般用途 我想记录topN 0 20 10e7 条记录 如果使用heapq 应该使用 将最大值转换为最小值 并记录底部的最小数量 以调用 heapq heappushpop 我应该使用 heapq 还是自行实
  • Recyclerview:监听padding点击事件

    我有一个水平的RecyclerView with leftPadding 48dp topPadding 24dp and clipToPadding false 它从左侧的空白空间开始 但是当用户滚动列表时 其项目将绘制在该 以前是空的
  • 在iOS AVPlayer中,addPeriodicTimeObserverForInterval似乎丢失了

    我正在尝试设置AVPlayer addPeriodicTimeObserverForInterval 有人用过这个成功吗 我正在使用 Xcode 8 1 Swift 3 接受的答案让人感觉您可以将返回值分配给局部变量并忽略它 但根据doc
  • getPass() 在 Eclipse 中回显密码

    嘿 大家刚刚开始涉足一点 Python 以帮助处理工作中的一些脚本 但我似乎被一个小问题所困扰 我使用 Eclipse 和 pydev 作为我的开发平台 并针对 python 2 7 3 进行开发 我只是想提示用户输入密码 使用 passw
  • MKMapView 显示错误保存的区域

    当我的 iPhone 应用程序关闭时 我将地图区域保存到用户默认值中 如下所示 MKCoordinateRegion region mapView region NSUserDefaults standardUserDefaults set
  • 一个 INSERT 多个 SELECT

    我已经读过this https stackoverflow com questions 20426967 adding two select statements into one insert into statement in post
  • 如何对齐标签和输入字段

    我希望我的输入字段 标题 直接呈现在单选按钮下方 但现在它离左侧太远了 我需要额外的div因为它是动态表单 但我想要网格视图 我怎样才能做到这一点
  • 通用设计与奇怪的重复模板模式混合在一起。 C++

    考虑这样的问题 我有一个Base类和三个派生类Base 例如 DerivedA DerivedB and DerivedC 每个派生类都有其独特的容器 因此DerivedA has std vector
  • 如何使用java获取由aws中的文件组成的文件夹大小

    假设我们有一个名为 bucket1 的桶 里面有一个 名为 新文件夹 的文件夹 新文件夹 内是文件新文件夹 a1 pdf gt 2mb新文件夹 a2 pdf gt 2mb新文件夹 新文件夹2 b pdf gt 3mb 当我们使用 amazo
  • androidx 中已弃用 OnActivityResult()

    OnActivityResult 在 androidx 中已弃用 我从下面的链接中参考了 https developer android com training basics intents result https developer
  • 将不同的行值作为列 Sql Server

    我有一个包含 3 列的临时表 如下所示 JobID JobType JobValue 12 HR Jesica 23 MANAGER Ravi 5 MANAGER Jacob 60 EMPLOYEE Kiruan 45 MANAGER Ab
  • 人脸检测中的 Haar Cascades 与 LBP Cascades [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我一直在 OpenCV 开源计算机视觉库 中尝试人脸检测 发现可以使用 Haar 级联来检测人脸 因为 OpenCV 提供了多个人脸检测 然而
  • 将枚举值与位标志组合

    我有这样的场景 用户有其角色 普通用户保管人金融 托管人和财务都是超级用户 我如何检查是否角色 托管人 is a 超级用户 这是我的示例代码 using System using System Collections Generic usi
  • jQuery AJAX 轮询 JSON 响应,根据 AJAX 结果或 JSON 内容进行处理

    我是一名初级到中级 JavaScript jQuery 程序员 因此非常感谢具体 可执行的示例 我的项目需要使用 AJAX 轮询返回 JSON 的 URL 其中包含要添加到 DOM 的内容或消息 状态 待处理 这表明后端仍在生成包含内容的