我是一名初级到中级 JavaScript/jQuery 程序员,因此非常感谢具体/可执行的示例。
我的项目需要使用 AJAX 轮询返回 JSON 的 URL,其中包含要添加到 DOM 的内容或消息{“状态”:“待处理”}这表明后端仍在生成包含内容的 JSON 响应。这个想法是,对 URL 的第一个请求触发后端开始构建 JSON 响应(然后缓存),后续调用检查此 JSON 是否准备好(在这种情况下提供)。
在我的脚本中,我需要以 15 秒的间隔(最多 1 分 30 分)轮询此 URL,并执行以下操作:
- 如果 AJAX 请求导致错误,则终止脚本。
- 如果AJAX请求成功,并且JSON内容包含{“状态”:“待处理”},继续轮询。
- 如果 AJAX 请求成功,并且 JSON 内容包含可用内容(即除{“状态”:“待处理”}),然后显示该内容,停止轮询并终止脚本。
我尝试了一些方法,但效果有限,但我感觉它们都比需要的更混乱。这是我成功使用的一个骨架函数,一次发出一个 AJAX 请求,如果我从 JSON 响应中获取可用内容,该函数就会完成其工作:
// make the AJAX request
function ajax_request() {
$.ajax({
url: JSON_URL, // JSON_URL is a global variable
dataType: 'json',
error: function(xhr_data) {
// terminate the script
},
success: function(xhr_data) {
if (xhr_data.status == 'pending') {
// continue polling
} else {
success(xhr_data);
}
},
contentType: 'application/json'
});
}
但是,此函数目前不执行任何操作,除非它收到包含可用内容的有效 JSON 响应。
我不知道在评论中该怎么做。我怀疑另一个函数应该处理轮询,并调用 ajax_
request() 根据需要,但我不知道ajax最优雅的方式_
request() 将其结果传达回轮询函数,以便它可以做出适当的响应。
很感谢任何形式的帮助!如果我可以提供更多信息,请告诉我。谢谢!