使用jQuery AJAX进行JSON响应的轮询,在AJAX结果或JSON内容的基础上进行处理。

7 浏览
0 Comments

使用jQuery AJAX进行JSON响应的轮询,在AJAX结果或JSON内容的基础上进行处理。

我是一个初级到中级的JavaScript/jQuery程序员,所以非常希望能够提供具体可执行的示例。

我的项目需要使用AJAX轮询一个返回JSON的URL,其中包含要添加到DOM的内容,或者包含一个消息{ "status" : "pending" },表示后端仍在生成带有内容的JSON响应。这个想法是第一个对URL的请求会触发后端开始构建JSON响应(然后进行缓存),后续的调用将检查该JSON是否已准备就绪(如果是,则提供)。

在我的脚本中,我需要以15秒的间隔轮询这个URL,最长不超过1分30秒,并执行以下操作:

- 如果AJAX请求导致错误,请终止脚本。

- 如果AJAX请求成功,并且JSON内容包含{ "status" : "pending" },则继续轮询。

- 如果AJAX请求成功,并且JSON内容包含可用内容(即任何有效的响应,而不仅仅是{ "status" : "pending" }),则显示该内容,停止轮询并终止脚本。

我尝试了一些方法,但成功有限,我感觉它们都比必要的复杂。这里是一个我已经成功使用的骨架函数,用于一次发送一个AJAX请求,如果我从JSON响应中得到可用内容,则能够完成其工作:

// 发起AJAX请求
function ajax_request() {
  $.ajax({
    url: JSON_URL, // JSON_URL是一个全局变量
    dataType: 'json',
    error: function(xhr_data) {
      // 终止脚本
    },
    success: function(xhr_data) {
      if (xhr_data.status == 'pending') {
        // 继续轮询
      } else {
        success(xhr_data);
      }
    },
    contentType: 'application/json'
  });
}

然而,除非接收到包含可用内容的有效JSON响应,否则此函数目前什么也不做。

对于那些只是注释的行,我不确定该怎么做。我怀疑另一个函数应该处理轮询,并根据需要调用ajax_request(),但我不知道ajax_request()以最优雅的方式如何将其结果传递回轮询函数,以便可以适当地做出响应。

非常感谢任何帮助!如果需要更多信息,请告诉我。谢谢!

0