我是一名中级 JavaScript/jQuery 程序员,因此非常感谢具体/可执行的示例。
我的项目需要使用 AJAX 轮询返回 JSON 的 URL,该 URL 包含要添加到 DOM 的内容,或指示后端仍在使用内容生成 JSON 响应的消息{“status”:“pending”} . 这个想法是,对 URL 的第一个请求会触发后端开始构建 JSON 响应(然后将其缓存),随后的调用会检查此 JSON 是否已准备好(在这种情况下已提供)。
在我的脚本中,我需要以 15 秒的间隔轮询此 URL,最多 1:30 分钟,并执行以下操作:
- 如果 AJAX 请求导致错误,则终止脚本。
- 如果 AJAX 请求成功,并且 JSON 内容包含{ "status" : "pending" },则继续轮询。
- 如果 AJAX 请求成功,并且 JSON 内容包含可用内容(即除{ "status" : "pending" }之外的任何有效响应),则显示该内容,停止轮询并终止脚本。
我尝试了几种方法,但效果有限,但我感觉它们都比它们需要的更混乱。这是我成功使用的一个骨架函数,它一次成功地发出一个 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() 将其结果传回轮询函数以便它可以适当响应的最优雅方式。
很感谢任何形式的帮助!如果我能提供更多信息,请告诉我。谢谢!