Я использую запрос jQuery и возвращаю его объект xhr. Когда это будет сделано, я передаю этот объект xhr, чтобы построить диаграмму.Функция обратного вызова jQuery - как передать этот параметр
См код ниже:
function getPieData() {
getData('@Url.Action("AjaxPieDataOverdue", "KPIs")').done(createPie, 'overdue');
getData('@Url.Action("AjaxPieDataApproaching", "KPIs")').done(createPie, 'approaching');
getData('@Url.Action("AjaxPieDataWithin", "KPIs")').done(createPie, 'within');
};
function getData(url) {
return $.ajax({
type: "GET",
url: url,
contentType: "application/json; charset=utf-8",
success: function (data) {
},
error: function (data) {
}
});
};
function createPie(data, type) {
alert(data);
$('#jqxwindow-pie').jqxWindow('open');
var source =
{
datatype: "json",
datafields: [
{ name: 'SectionCount' },
{ name: 'SectionStatus' }
],
localdata: data
};
var dataAdapter = new $.jqx.dataAdapter(source, { async: false, autoBind: true, loadError: function (xhr, status, error) { alert('Error loading "' + source.url + '" : ' + error); } });
// prepare jqxChart settings
var settings = {
title: "Desktop browsers share in Dec 2011",
description: "(source: wikipedia.org)",
enableAnimations: true,
showLegend: false,
legendPosition: { left: 520, top: 140, width: 100, height: 100 },
padding: { left: 5, top: 5, right: 5, bottom: 5 },
titlePadding: { left: 0, top: 0, right: 0, bottom: 10 },
source: dataAdapter,
colorScheme: 'scheme02',
seriesGroups:
[
{
type: 'pie',
showLabels: true,
series:
[
{
dataField: 'SectionCount',
displayText: 'SectionStatus',
labelRadius: 100,
initialAngle: 15,
radius: 130,
innerRadius: 50,
centerOffset: 0,
formatSettings: { sufix: '%', decimalPlaces: 1 }
}
]
}
]
};
if (type == 'overdue') {
// setup the chart
alert("overdue");
$('#chartContainer-pie-overdue').jqxChart(settings);
}
else if (type == 'approaching') {
alert("approaching");
$('#chartContainer-pie-approaching').jqxChart(settings);
} else {
alert("approaching");
$('#chartContainer-pie-within').jqxChart(settings);
}
}
В этом примере:
getData('@Url.Action("AjaxPieDataOverdue", "KPIs")').done(createPie, 'overdue');
просрочены не передается в моей функции. Я хочу использовать эту переменную для блока if/else ниже. Как передать эту переменную?
ли вы имеете в виду: '.done (функция (данные) {createPie (данные 'просроченный');}); –
@ A.Wolff Да, это то, что я хотел. Я нахожу обратные вызовы немного запутанными. Я знаю, что хочу подождать, пока мои данные будут возвращены, прежде чем использовать их. Но я не знал, как передать этот пареметр, пока не воспользуюсь вашим предложением. Я поставил ваш вопрос правильно, если вы опубликуете его как ответ. –