Javascript 返回JSON的URL的AJAX轮询不';似乎没有返回新的响应(使用jQuery$.ajax()方法)
我的项目需要使用AJAX轮询特定URL以获得JSON响应。我发出的第一个AJAX请求提醒服务器我需要一些JSON内容,它开始构建和缓存响应,为每个后续AJAX请求返回{“status”:“pending”},直到JSON准备就绪。此时,响应将更改为JSON,其中包含我可以解析并显示在文档中的内容,我希望在URL返回除{“status”:“pending”}以外的任何内容时立即执行此操作 我已经设置了一个轮询函数,它可以像预期的那样从URL重复请求JSON。然而,问题是它仍然会得到响应{“status”:“pending”},即使我直接导航到URL,并且可以看到完整的JSON响应已经准备好并正在提供服务。出于某种原因,我的轮询函数仍然获取{“status”:“pending”} 当我刷新包含轮询代码的页面时,它通常在第一个请求上工作——即,它获得完整的JSON响应。这让我相信这是某种缓存问题,但我不知道在哪里或为什么。不是每个AJAX请求都应该得到新的响应吗,或者这是我可以在$.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
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值得注意的是,在本地测试代码、轮询本地.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我发现了!当你使用“相关”链接发布此内容时,我发现了一个具有相同解决方案的问题。我在发布之前进行了搜索,但一定没有使用正确的术语。非常感谢,这解决了它!当你使用“相关”链接发布此内容时,我发现了一个具有相同解决方案的问题链接。在发布之前我已经搜索过了,但我一定没有使用正确的术语。谢谢大卫,我感谢你的输入-现在更有意义了。谢谢大卫,我感谢你的输入-现在更有意义了。