У меня есть функция JQueryВозвращение обещание рекурсивной Jquery AJAX
group: function (text) {
var a1 = SPM.aChart();
var a2 = SPM.aSChart();
$.when(a1, a2).done(function() {//excecutes below function when all the charts are loaded.
SPM.EIEachGroup();
});
},
aChart и aSChart загружает несколько графиков и после загрузки все, что нужно вызвать EIEachGroup функция(), эти две функции рекурсивные функции AJAX, в настоящее время Функция EIEachGroup() запускается, когда диаграммы не загружаются, вот как я возвращаю обещание от вызова ajax.
aChart: function() {
var grpAttrId = 1;
var group = 'a';
var def = $.Deferred();
return $.ajax({
url: Url.getSegmentBreak,
type: 'GET',
data: { sgmntGrpAttrId: grpAttrId, selectedGroup: group },
dataType: 'json',
success: function (data) {
jQuery.each(data, function (index, item) {
$.ajax({
url: Url.GetScatterPlot,
type: 'GET',
data: { sgmntGrpAttrId: grpAttrId, selectedGroup: group, segmentBreak: item },
dataType: 'json',
success: function (data) {
SPM.GetSegmentScatterPlot(data,item);//function to plot chart
}
});
});
}
});
def.resolve();
return def.promise();
},
aSChart также похож выше AJAX, какие изменения необходимо сделать, чтобы EIEachGroup() вызывается, когда обе эти функции полностью сделано.
--update - изменили функцию как упоминалось выше, но все равно это не будет ждать, пока он закончит, ниже это изменение я сделал
aMultiAxesChart: function() {
var grpAttrId = 1
var group = 'a'
var def = $.Deferred();
return $.ajax({
url: Url.getSegmentBreak,
type: 'GET',
async: false,
data: { sgmntGrpAttrId: grpAttrId, selectedGroup: group },
dataType: 'json'
}).done(function (data) {
var calls = jQuery.map(data, function (item, index) {
return $.ajax({
url: Url.GetHistMedTransData,
type: 'GET',
data: {
sgmntGrpAttrId: grpAttrId, selectedGroup: group, segmentBreak: item
},
dataType: 'json',
success: function (data) {
var seriesData = [];
var seriesData1 = [];
var seriesData2 = [];
var xCategories = [];
for (i = 0; i < data.length; i++) {
if (seriesData) {
var segName = data[i].MnthSmryStartDate;
if (xCategories.indexOf(segName) === -1) {
xCategories[xCategories.length] = segName;
}
seriesData1[i] = data[i].MedianTransactionAmt;
seriesData2[i] = data[i].MedianTransactionCnt;
}
}
seriesData = [
{
name: 'Amount',
type: 'column',
color: '#808080',
data: seriesData1,
tooltip: {
valueSuffix: ' mm'
}
}, {
name: 'Count',
type: 'line',
color: 'Red',
yAxis: 1,
data: seriesData2,
tooltip: {
valueSuffix: ' °C'
}
}
];
var divIndex = 1 + index;
var name = '#dvHistMed1' + divIndex;
SegmentProgressMeter.GetSegmentHistMedTransData(xCategories, seriesData, item, name);
}
});
});
return $.when.apply($, calls);
}).promise();
},
Вы знаете, что используете 'return' дважды? 'return $ .ajax ({' и 'return def.promise();' so second unreachable – Grundy
@ Grundy- следует удалить return $ .ajax и сохранить return def.promise()? –
@crowder - я сделал изменение как вы предложили, но все равно это не подождало, я разместил код, вы видите какие-либо изменения? –