我是一个初级到中级的 JavaScript/jQuery 程序员,因此非常感谢具体/可执行的示例。
我的项目需要使用 AJAX 轮询一个 URL,该 URL 返回包含要添加到 DOM 的内容的 JSON,或者消息{ "status" : "pending" }指示后端仍在使用内容生成 JSON 响应. 这个想法是对 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() 将其结果传达回轮询函数以便它可以适当响应的最优雅方式。
很感谢任何形式的帮助!如果我能提供更多信息,请告诉我。谢谢!