我是一个新手到中间的JavaScript / jQuery的程序员,所以具体的/可执行的例子是非常赞赏。
我的项目需要使用AJAX来轮询返回包含任一内容被添加到DOM JSON一个URL,或消息{“状态”:“未决”},指示该后端仍然工作于生成与所述内容的JSON响应。 这个想法是,该URL的第一请求触发后端开始构建一个JSON响应(然后缓存),以及后续调用检查是否该JSON准备好(在这种情况下,它提供)。
在我的剧本,我需要轮询以15秒间隔此URL高达1:30分钟,并执行以下操作:
- 如果AJAX请求导致错误,终止脚本。
- 如果AJAX请求引起了成功,而JSON内容包含{“地位”:“挂起”},继续扫描。
- 如果AJAX请求导致成功,和JSON内容包含可用内容(即,比{“状态”:“未决”}其他任何有效响应),则显示该内容,停止轮询和终止脚本。
我试着与有限的成功,几个办法,但我得到这个意义上,他们比他们需要的所有混乱。 下面是我成功用于制造的时间,如果我从JSON响应可用含量,它的工作一个AJAX请求骨骼功能:
// 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 _
按需请求(),但我不知道AJAX最优雅的方式_
请求()来备份传达其结果轮询功能,使得它可以回应适当。
很感谢任何形式的帮助! 请让我知道如果我能提供任何更多的信息。 谢谢!
你可以使用一个简单的超时递归调用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);
}
}
坚持围绕该行的计数器检查,你已经有了投票的最大数量。
if (xhr_data.status == 'pending') {
if (cnt < 6) {
cnt++;
setTimeout(function() { ajax_request(); }, 15000); // wait 15 seconds than call ajax request again
}
}
除非你想放警报了什么的,你不需要在你的误差函数做任何事情。 一个简单的事实,它的错误会阻止成功函数被调用,并可能触发另一轮。
非常感谢你的功能。 这是一个有点马车,但这里是修复。 roosteronacid的回答达到100%后不会停止,因为调用clearInterval函数错误使用。
这里是一个工作的功能:
$(function ()
{
var statusElement = $("#status");
// this function will run each 1000 ms until stopped with clearInterval()
var i = setInterval(function ()
{
$.ajax(
{
success: function (json)
{
// progress from 1-100
statusElement.text(json.progress + "%");
// when the worker process is done (reached 100%), stop execution
if (json.progress == 100) clearInterval(i);
},
error: function ()
{
// on error, stop execution
clearInterval(i);
}
});
}, 1000);
});
调用clearInterval()函数becomming间隔id作为参数,然后一切都很好;-)
聂干杯
关闭我的头顶:
$(function ()
{
// reference cache to speed up the process of querying for the status element
var statusElement = $("#status");
// this function will run each 1000 ms until stopped with clearInterval()
var i = setInterval(function ()
{
$.ajax(
{
success: function (json)
{
// progress from 1-100
statusElement.text(json.progress + "%");
// when the worker process is done (reached 100%), stop execution
if (json.progress == 100) i.clearInterval();
},
error: function ()
{
// on error, stop execution
i.clearInterval();
}
});
}, 1000);
});
您可以使用JavaScript的setInterval函数加载内容每5秒。
var auto= $('#content'), refreshed_content;
refreshed_content = setInterval(function(){
auto.fadeOut('slow').load("result.php).fadeIn("slow");},
3000);
供你参考-
自动刷新的div内容,每3秒
文章来源: jQuery AJAX polling for JSON response, handling based on AJAX result or JSON content