2011-08-10 28 views
1

我有以下的jQuery代碼:jqplot沒有顯示AJAX數據

$(document).ready(function() { 
     var group = 'test'; 
     $.ajax({ 
      type: "POST", 
      async: false, 
      url: "/validate.asmx/GetGraphData", 
      contentType: "application/json;", 
      data: "{'groupBy': '" + group + "'}", 
      dataType: 'json', 
      success: function (data) { 
       Plot(data.d); 
      } 
     }); 
    }); 

    function Plot(dataIn) { 
     alert(dataIn); 
     $.jqplot('chartcontainer', [[[ 'test1', 1 ], [ 'test2', 5]]], 
     { 
      seriesDefaults: { 
       renderer: $.jqplot.PieRenderer, 
       rendererOptions: { 
        showDataLabels: true 
       } 
      }, 
      legend: { show: true, location: 'e' } 
     } 
      ); 
    } 

將WebMethod(切割它進行測試後)看起來是這樣的:

[WebMethod] 
    public string GetGraphData(string groupBy) 
    { 
     PaymentModelDataContext db = new PaymentModelDataContext(); 
     var q = from Event in db.TrackingEvents 
       group Event by Event.campaignID; 

     //string returnJSON; 
     //string returnJSON = "["; 
     //foreach (var grp in q) 
     //{ 
     // returnJSON += "['" + grp.Key + "'," + grp.Count() + "],"; 
     //} 

     //returnJSON += "]"; 


     //var ser = new JavaScriptSerializer(); 
     //returnJSON = ser.Serialize(q); 
     //return returnJSON; 
     return "[['test1' , 1],['test2' , 5]]"; 
    } 

如果我採取相同的字符串我返回這裏,並把它作爲文本在jQuery代碼中,情節顯示。我在劇情功能中加入了一個警報,數據就像我發送的那樣。 任何想法?

謝謝!

回答

5

使用dataRenderer

$(document).ready(function(){ 

    var ajaxDataRenderer = function(url, plot) { 
     var ret = null; 
     $.ajax({ 
      // have to use synchronous here, else returns before data is fetched 
      async: false, 
      url: url, 
      dataType:'json', 
      success: function(data) { 
       ret = data; 
      } 
     }); 
     return ret; 
    }; 

    var jsonurl = "/validate.asmx/GetGraphData"; 

    plo12 = $.jqplot('chart2', jsonurl,{ 
     title: 'AJAX JSON Data Renderer', 
     dataRenderer: ajaxDataRenderer, 
     seriesDefaults: { 
      renderer: $.jqplot.PieRenderer, 
      rendererOptions: { 
       showDataLabels: true 
      } 
     }, 
     legend: { show: true, location: 'e' } 

    }); 
}); 
1

把AJAX數據jqPlot dataRenderer是一個選項。但它也會按照您選擇的方式工作。

確保數據不作爲字符串處理。

如果你的數據是"[['test1' , 1],['test2' , 5]]"arr=eval("[['test1' , 1],['test2' , 5]]")應該從你的數據中產生一個數組。

如果您在螢火蟲控制檯上使用console.warn("[['test1' , 1],['test2' , 5]]");console.warn(arr);,您將會看到區別。