【发布时间】:2013-11-20 06:47:46
【问题描述】:
function loadGraphInSeq(startDate,endDate,calcSubStart,calcSubEnd){
var graphName=new Array();
$('section div.graph_box').each(function(){
if ($(this).css('display')=='block') {
graphName.push($(this).attr('id'));
}
});
for (index=0;index<graphName.length;index++) {
switch (graphName[index]) {
case 'allquery':
break;
case 'alwazinc':
alwayzincreasing(calcSubStart,calcSubEnd,startDate,endDate);
break;
case 'segment':
ajaxCallingSegment(startDate,endDate,calcSubStart,calcSubEnd);
break;
case 'answeredresponse':
ajaxCallingSegmentRespDay(startDate,endDate,calcSubStart,calcSubEnd);
break;
case 'segmentresponse':
ajaxCallingSegmentRespHours(startDate,endDate,calcSubStart,calcSubEnd);
break;
case 'lessthanDonut':
ajaxCallinglessthanDonut(startDate,endDate,calcSubStart,calcSubEnd,'total');
ajaxCallinglessthanDonut(startDate,endDate,calcSubStart,calcSubEnd,'latency');
ajaxCallinglessthanDonut(startDate,endDate,calcSubStart,calcSubEnd,'delivery');
break;
case 'carrierPie':
ajaxCallingCarrierPie(startDate,endDate,calcSubStart,calcSubEnd);
break;
}
}
}
让我解释一下,我有显示图表的类 .graph_box。当我更改调用 loadGraphInSeq 的日期并且我想按顺序加载图表时,这些 div 的顺序会发生变化,即,除非加载一个图表,否则不应调用其他函数。 switch 语句中的函数调用该函数来加载图形。目前此功能一次性加载所有功能。 graphName 堆叠了所有需要加载的图(未隐藏的)名称。
【问题讨论】:
-
在 for 循环中调用 ajax 函数不会保证您的执行顺序。我认为您需要从数组(pop 数组)中调用第一个函数,为 ajaxRequest 提供回调函数,然后再次在回调 pop 数组中调用下一个函数。这样您就可以确保所需的顺序。
-
是的,我想到了使用 callback() 函数,但我不知道如何使用。我使用了 foreach 函数,但这没有帮助。你能给我举个例子吗?
-
试试这个链接可能对你有帮助stackoverflow.com/questions/19572306/…
-
@Yevgeniy.Chernobrivets 使用 jQuery promise 可以保证正确的顺序。我会尽快发布答案。还没有使用 jQuery 的 promise 实现,听说它不是“标准的”,所以必须先检查文档(当我有时间的时候)
-
用“async: false”试过了吗?
标签: javascript jquery ajax