当前位置: 首页 > 面试题库 >

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

史默
2023-03-14
问题内容

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

我的项目需要使用AJAX轮询返回JSON的URL,该JSON包含要添加到DOM的内容,或者是一条消息 {“ status”:“ pending”}
,该消息指示后端仍在使用内容生成JSON响应。这个想法是,对URL的第一个请求会触发后端以开始构建JSON响应(然后将其缓存),随后的调用将检查此JSON是否准备就绪(在这种情况下已提供)。

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

  • 如果AJAX请求导致错误,请终止脚本。
  • 如果AJAX请求成功完成,并且JSON内容包含 {“ status”:“ pending”} ,请继续轮询。
  • 如果AJAX请求成功完成,并且JSON内容包含可用内容(即 {{“ status”:“ pending”} 以外的任何有效响应),则显示该内容,停止轮询并终止脚本

我尝试了几种方法,但收效甚微,但是我感觉到它们都比需要的更加混乱。这是我一次成功使用过的骨架功能,一次可以发出一个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
  }
}

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



 类似资料:
  • 我正在尝试使用Struts 2和jQuery构建Web应用程序。 在改变下拉列表时,我需要从数据库中获取详细信息。在我的< code>struts.xml配置中,我将方法和操作定义如下: 当我在所有相应位置进行更改后执行应用程序时,请求被传递给 类和 DAO 方法,并且控件成功返回到屏幕。但是返回的数据在屏幕上不可用,我收到一条错误消息: url…404未在jQuery中找到(匿名函数)ajax。

  • 问题内容: 哪种方法更快,要返回JSON中的ajax,然后处理JSON响应以呈现html,或者只是将Ajax响应中的原始html放在一堆中呢? 问题答案: 要看。在这两种情况下,服务器都只是返回带有文本的响应。如果响应的JSON版本比HTML版本需要更多字符,则该响应将需要更长的时间才能传输回客户端,反之亦然。 但是,当然还有服务器端脚本必须完成其工作。在您的情况下,从服务器端脚本生成JSON可能

  • 问题内容: 我有一个页面作为HtmlUnit中的UnexpectedPage返回,响应为JSON。我可以使用HTMLUnit进行解析还是需要一个额外的库? 问题答案: HtmlUnit不支持它。它最多可以执行JS函数。您需要事先检查返回的响应是否匹配,然后使用合适的工具进行解析。Google Gson 在此方面很有用。 如果JSON结构是事先已知的,则您甚至可以使用Gson将其转换为完全有价值的J

  • 问题内容: 我是Go的新手,我正在尝试构建一个简单的HTTP服务器。但是我在JSON响应中遇到了一些问题。我编写了以下代码,然后尝试邮递员发送一些JSON数据。但是,我的邮递员总是得到空响应,而is 。然后,我在http://www.alexedwards.net/blog/golang-response- snippets#json中 检查了一个示例。我复制并粘贴了示例,并且效果很好。但是我看不

  • 问题内容: 我正在尝试使用以下代码解析通过json从Web服务返回的一些数据。 返回的数据是这个。 尽管jsut发出的警报返回未定义的内容。所以我知道我丢失了一些东西,这可能与JSON的嵌套有关。有人可以为我指出一些材料或代码的正确说明,这些材料或代码向我展示了如何遍历数据(如我所接收的数据)。 问题答案: 尝试以下方法: 继续读那个怪异的东西。

  • 问题内容: 我在弄清楚如何从jQuery $ .post()请求中正确读取JSON响应时遇到了麻烦。 在下面的jQuery代码中,我根据对应的“ color_entry_id”(用作键)从DOM中的元素填充字符串的关联数组: 然后,我发出POST请求,发送“ image_links”数组: 另外,如上所示,我尝试遍历响应数组并输出要成为字符串的每个项目,但是我只得到“ [object Object