2014-10-22 3 views
0

Я использую запрос 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 ниже. Как передать эту переменную?

+3

ли вы имеете в виду: '.done (функция (данные) {createPie (данные 'просроченный');}); –

+0

@ A.Wolff Да, это то, что я хотел. Я нахожу обратные вызовы немного запутанными. Я знаю, что хочу подождать, пока мои данные будут возвращены, прежде чем использовать их. Но я не знал, как передать этот пареметр, пока не воспользуюсь вашим предложением. Я поставил ваш вопрос правильно, если вы опубликуете его как ответ. –

ответ

2

например, вы можете использовать анонимную функцию в done обратного вызова для передачи дополнительного Params так:

getData('...').done(function(data){createPie(data,'overdue');}); 
+0

Спасибо за помощь! –