【发布时间】:2010-11-27 15:03:23
【问题描述】:
我的项目需要使用 AJAX 轮询某个 URL 以获得 JSON 响应。我发出的第一个 AJAX 请求提醒服务器我需要一些 JSON 内容,它开始构建和缓存响应,为每个后续 AJAX 请求发送回 { "status" : "pending" }直到 JSON 准备好。此时,响应更改为包含我可以在文档中解析和显示的内容的 JSON,只要 URL 返回 { "status" : "pending" } em>。
我设置了一个轮询函数,可以按预期重复从 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'
});
}
success() 是在页面上显示 JSON 内容(即我在轮询时等待变为可用的内容)的函数。
值得注意的是,在本地测试代码时,轮询本地 .json 测试文件,我可以将文件的内容从 { "status" : "pending" } 更改为包含像我正在寻找的内容,在轮询实例之间保存文件,然后在下一次轮询时,我的代码会看到新内容并按预期工作。它只是在暂存环境中不起作用。
【问题讨论】:
标签: javascript jquery ajax json polling