Summery:我必须使用C#从服务(托管在多个服务器上)获取多个数据,最后使用ajax调用将它们显示在一个页面上。考虑到最终的显示格式包含由Jquery创建并由CSS设置的图表和进度。
部分代码:
// Once Called Here and Timer Will Go On
UpdateDataA();
function UpdateDataA() {
$.ajax({
type: "POST",
async: true,
url: "Default.aspx/GetData",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
var $s = $(".second");
$s.val(r.d[0]).trigger("change");
updateProgressA(r.d[1]);
updateProgressB(r.d[2]);
updateNetworkData(bytesToSize(r.d[5], 2), bytesToSize(r.d[6], 2));
},
error: function (msg) {
alert(msg.error);
}
});
setTimeout(function () { UpdateDataA(); }, 1000);//Timer
}
考虑更多这样的电话。
问题:定时器间隔未按设置的间隔更新。一个元素更新正确然后等待其他元素完成,而不应该。但我需要一起更新所有内容。通过这种方式,如果一次呼叫崩溃,其他人将会死亡。
问题:我该怎么做或我的错误是什么?
注意:我是jquery和ajax的新手。
先谢谢你
答案 0 :(得分:1)
忽略我对间隔的评论。我想你需要跟踪你的计时器:
timerA = setTimeout(function () { UpdateDataA(); }, 1000);
并清除更新功能直到任务完成
var timerA;
// Once Called Here and Timer Will Go On
UpdateDataA();
function UpdateDataA() {
clearTimeout(timerA);
$.ajax({
type: "POST",
async: true,
url: "Default.aspx/GetData",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
var $s = $(".second");
$s.val(r.d[0]).trigger("change");
updateProgressA(r.d[1]);
updateProgressB(r.d[2]);
updateNetworkData(bytesToSize(r.d[5], 2), bytesToSize(r.d[6], 2));
timerA = setTimeout(function () { UpdateDataA(); }, 1000);//Restart time after task is complete
},
error: function (msg) {
alert(msg.error);
}
});
}