jqplot не показывает данные ajax

У меня есть следующий код jQuery:

$(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]
    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, будет показан график. Я поместил предупреждение в функцию графика, и данные такие, как я их отправил. Любые идеи?

Благодарю вас!


person Elad Lachmi    schedule 10.08.2011    source источник


Ответы (2)


использовать 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' }

    });
});
person nologo    schedule 11.08.2011

Одним из вариантов является размещение данных ajax в jqPlot dataRenderer. Но он также будет работать так, как вы выберете.

Убедитесь, что данные не обрабатываются как строка.

если ваши данные "[['test1' , 1],['test2' , 5]]", то arr=eval("[['test1' , 1],['test2' , 5]]") должен сгенерировать массив из ваших данных.

Вы увидите разницу, если будете использовать console.warn("[['test1' , 1],['test2' , 5]]"); и console.warn(arr); в консоли firebug.

person The Bndr    schedule 11.08.2011