Bun*_*gle 46 javascript ajax jquery json polling
我是一个初学者到中级的JavaScript/jQuery程序员,因此非常感谢具体/可执行的例子.
我的项目需要使用AJAX来轮询返回包含要添加到DOM的内容的JSON的URL,或者使用消息{"status":"pending"}来表示后端仍在使用内容生成JSON响应.这个想法是对URL的第一个请求触发后端开始构建JSON响应(然后缓存),后续调用检查这个JSON是否准备就绪(在这种情况下它是提供的).
在我的脚本中,我需要以15秒的间隔轮询此URL,最多1:30分钟,并执行以下操作:
我尝试了一些方法,但成功有限,但我觉得它们比他们需要的更加混乱.这是一个骨架函数,我成功地使用它来一次制作一个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'
});
}
Run Code Online (Sandbox Code Playgroud)
但是,除非收到包含可用内容的有效JSON响应,否则此函数当前不执行任何操作.
我不知道该怎么做只是评论.我怀疑另一个函数应该处理轮询,并_根据需要调用ajax request(),但我不知道ajax _request()将其结果传递回轮询函数的最优雅方式,以便它可以适当地响应.
很感谢任何形式的帮助!如果我能提供更多信息,请告诉我.谢谢!
Joe*_*oel 47
您可以使用简单的超时来递归调用ajax_request.
success: function(xhr_data) {
console.log(xhr_data);
if (xhr_data.status == 'pending') {
setTimeout(function() { ajax_request(); }, 15000); // wait 15 seconds than call ajax request again
} else {
success(xhr_data);
}
}
Run Code Online (Sandbox Code Playgroud)
坚持在该行周围进行反击检查,并且您获得了最大数量的民意调查.
if (xhr_data.status == 'pending') {
if (cnt < 6) {
cnt++;
setTimeout(function() { ajax_request(); }, 15000); // wait 15 seconds than call ajax request again
}
}
Run Code Online (Sandbox Code Playgroud)
您不需要在错误函数中执行任何操作,除非您想要发出警报或其他内容.这个简单的事实是它会阻止调用成功函数并可能触发另一个轮询.
| 归档时间: |
|
| 查看次数: |
40896 次 |
| 最近记录: |