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

Javascript 返回JSON的URL的AJAX轮询不';似乎没有返回新的响应(使用jQuery$.ajax()方法),javascript,jquery,ajax,json,polling,Javascript,Jquery,Ajax,Json,Polling,我的项目需要使用AJAX轮询特定URL以获得JSON响应。我发出的第一个AJAX请求提醒服务器我需要一些JSON内容,它开始构建和缓存响应,为每个后续AJAX请求返回{“status”:“pending”},直到JSON准备就绪。此时,响应将更改为JSON,其中包含我可以解析并显示在文档中的内容,我希望在URL返回除{“status”:“pending”}以外的任何内容时立即执行此操作 我已经设置了一个轮询函数,它可以像预期的那样从URL重复请求JSON。然而,问题是它仍然会得到响应{“stat

我的项目需要使用AJAX轮询特定URL以获得JSON响应。我发出的第一个AJAX请求提醒服务器我需要一些JSON内容,它开始构建和缓存响应,为每个后续AJAX请求返回{“status”:“pending”},直到JSON准备就绪。此时,响应将更改为JSON,其中包含我可以解析并显示在文档中的内容,我希望在URL返回除{“status”:“pending”}以外的任何内容时立即执行此操作

我已经设置了一个轮询函数,它可以像预期的那样从URL重复请求JSON。然而,问题是它仍然会得到响应{“status”:“pending”},即使我直接导航到URL,并且可以看到完整的JSON响应已经准备好并正在提供服务。出于某种原因,我的轮询函数仍然获取{“status”:“pending”}

当我刷新包含轮询代码的页面时,它通常在第一个请求上工作——即,它获得完整的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'
  });
}
函数ajax\u poll(){ $.ajax({ url:JSON\u url,//JSON\u url是包含要轮询的url的字符串 数据类型:“json”, 错误:函数(xhr\U数据){ 显示错误(); }, 成功:函数(xhr\u数据){ 如果(xhr_data.status=='pending'){ poll++;//递增轮询计数器//poll是一个全局变量,用于跟踪请求数 if(poll success()是在页面上显示JSON内容的函数(即我在轮询时等待的内容)


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

您可以尝试添加
“cache:false”
您可以尝试添加
“cache:false”
来描述出现这种情况的一个潜在原因:您可能发出了GET-AJAX请求,但没有以任何方式区分URL(例如,查询字符串中没有额外的数据)

浏览器看到了这个请求,甚至不用麻烦用完整的请求来点击服务器(它可能会发出条件304 GET请求)。所有这些的最终结果是你没有看到你期望看到的活动


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

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

浏览器看到了这个请求,甚至不用麻烦用完整的请求来点击服务器(它可能会发出条件304 GET请求)。所有这些的最终结果是你没有看到你期望看到的活动


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

非常感谢,f我发现了!当你使用“相关”链接发布此内容时,我发现了一个具有相同解决方案的问题。我在发布之前进行了搜索,但一定没有使用正确的术语。非常感谢,这解决了它!当你使用“相关”链接发布此内容时,我发现了一个具有相同解决方案的问题链接。在发布之前我已经搜索过了,但我一定没有使用正确的术语。谢谢大卫,我感谢你的输入-现在更有意义了。谢谢大卫,我感谢你的输入-现在更有意义了。