返回JSON的URL的AJAX轮询似乎没有返回新的响应(使用jQuery $ .ajax()方法)

StackOverflow https://stackoverflow.com/questions/1412901

我的项目需要使用AJAX轮询JSON响应的某个URL。我发出的第一个AJAX请求警告服务器我想要一些JSON内容,它开始构建和缓存响应,然后发回给我 {" status" :“待定”对于每个后续的AJAX请求,直到JSON准备就绪。此时,响应更改为包含我可以解析并显示在文档中的内容的JSON,一旦URL返回 {" status"以外的任何内容,我想要执行此操作。 :“待定” }

我已经设置了一个轮询功能,可以按预期工作,从URL重复请求JSON。然而,问题在于它继续得到响应 {" status" :“待定”即使我直接导航到URL并且可以看到完整的JSON响应已准备好并正在提供服务,即使是。出于某种原因,我的轮询功能仍然是 {" status" :“待定” }

当我刷新包含轮询代码的页面时,它通常适用于第一个请求 - 即它获得完整的JSON响应。这让我相信它是某种缓存问题,但我不确定在哪里或为何。不应该每个AJAX请求都得到一个新的响应,或者这是我可以在 $。ajax()调用中设置的内容吗?

这是我现在使用的代码:

function ajax_poll() {
  $.ajax({
    url: JSON_URL, // JSON_URL is a string containing the URL to poll
    dataType: 'json',
    error: function(xhr_data) {
      display_error();
    },
    success: function(xhr_data) {
      if (xhr_data.status == 'pending') {
        poll++; // increment poll counter // poll is a global variable to track the number of requests made
        if (poll < POLLS) { // POLLS is a global variable to set the maximum number of requests
          setTimeout(function() { ajax_poll(); }, INTERVAL); // wait INTERVAL before another AJAX request
        } else {
          display_error();
        }
      } else {
        success(xhr_data);
      }
    },
    contentType: 'application/json'
  });
}

success()是在页面上显示JSON内容(即我正在等待轮询时可用的内容)的函数。

值得注意的是,在本地测试代码时,轮询本地.json测试文件,我可以从 {&quot; status&quot;更改文件的内容。 :“待定” 到包含我正在寻找的内容的响应,在轮询实例之间保存文件,在下一次轮询中,我的代码看到新内容并按预期工作。它只是在暂存环境中不起作用。

有帮助吗?

解决方案

您可以尝试添加&quot; cache:false&quot; 选项

其他提示

只是为了描述发生这种情况的潜在原因:您可能正在发出GET AJAX请求,但您没有以任何方式区分URL(例如,查询字符串中没有额外数据)。

浏览器看到此请求,甚至懒得用完整请求命中服务器(它可能会发出条件304 GET请求)。所有这一切的最终结果是你没有看到你期望看到的活动。

解决此问题的一种简单方法是不缓存AJAX请求的结果或发送POST请求。其他帖子中介绍了影响缓存选项的方法。 POST方法的问题在于您没有通过您的操作保存任何内容,因此您可以通过GET请求更好地表达您的意图。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top