我是一名初中级JavaScript/jQuery程序员,因此需要具体/可执行的示例。
我的项目要求使用AJAX轮询一个返回JSON的URL,其中包含要添加到DOM的内容或消息{ "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()以最优雅的方式将其结果传递回轮询函数,以便它可以适当地响应。
非常感谢任何帮助!如果我能提供更多信息,请告诉我。谢谢!
setTimeout()
指定了未来一段时间内要执行的代码块。只有当超时到期并且代码运行时,脚本的其余部分才会被阻塞。 - Joel