Jquery 序列化数据以实现Flot饼图兼容性

Jquery 序列化数据以实现Flot饼图兼容性,jquery,asp.net,json,flot,Jquery,Asp.net,Json,Flot,尽管我从服务器传递到客户机的数据与Flot接受的数据相同,但它并没有被绘制出来。在我试图解析返回的字符串JSON的行上也有一个错误。代码如下: //server_processing.aspx.cs [WebMethod] public static string GetPieData() { List<PieData> pieData = new List<PieData>(); pieData.Add(n

尽管我从服务器传递到客户机的数据与Flot接受的数据相同,但它并没有被绘制出来。在我试图解析返回的字符串JSON的行上也有一个错误。代码如下:

    //server_processing.aspx.cs
    [WebMethod]
    public static string GetPieData()
    {
        List<PieData> pieData = new List<PieData>();
        pieData.Add(new PieData { label = "A", data = 40 });
        pieData.Add(new PieData { label = "B", data = 40 });
        pieData.Add(new PieData { label = "C", data = 20 });

        var serializer = new JsonSerializer();
        var stringWriter = new StringWriter();
        var writer = new JsonTextWriter(stringWriter);
        writer.QuoteName = false;
        serializer.Serialize(writer, pieData);
        writer.Close();
        var json = stringWriter.ToString();
        return json;
    }

//PieData.cs
[JsonObject(MemberSerialization.OptIn)]
public class PieData
{
    [JsonProperty]
    public string label { get; set; }
    [JsonProperty]
    public int data { get; set; }
}

<%-- Charts.aspx --%>
<script type="text/javascript">
var options = { series: { pie: {show: true} } };
$(document).ready(function () {
    $.ajax({
        type: "POST",
        url: "server_processing.aspx/GetPieData",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            // Replace the div's content with the page method's return.
            var jsObj = [];
            //Error on the line below
            //0x800a03f6 - JavaScript runtime error: Invalid character
            jsObj.push($.parseJSON(msg.d)); // [{label:"A",data:40},{label:"B",data:40},{label:"C",data:20}] 

            $.plot($("#piechart"), jsObj, options);
        }
    });
});
//server\u processing.aspx.cs
[网络方法]
公共静态字符串GetPieData()
{
List pieData=新列表();
添加(新的pieData{label=“A”,data=40});
添加(新的pieData{label=“B”,data=40});
添加(新的pieData{label=“C”,data=20});
var serializer=new JsonSerializer();
var stringWriter=新的stringWriter();
var writer=新的JsonTextWriter(stringWriter);
writer.QuoteName=false;
序列化(writer,pieData);
writer.Close();
var json=stringWriter.ToString();
返回json;
}
//PieData.cs
[JsonObject(MemberSerialization.OptIn)]
公共类数据
{
[JsonProperty]
公共字符串标签{get;set;}
[JsonProperty]
公共int数据{get;set;}
}
var options={series:{pie:{show:true}}};
$(文档).ready(函数(){
$.ajax({
类型:“POST”,
url:“server_processing.aspx/GetPieData”,
数据:“{}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(msg){
//用page方法的return替换div的内容。
var jsObj=[];
//下一行有错误
//0x800a03f6-JavaScript运行时错误:无效字符
jsObj.push($.parseJSON(msg.d));/[{label:“A”,数据:40},{label:“B”,数据:40},{label:“C”,数据:20}]
$.plot($(“#piechart”)、jsObj、选项;
}
});
});


我对Flot折线图也做了同样的事情,效果非常好。有人能告诉我哪里出了问题吗?

我发现了问题。我注释掉了以前的代码,并插入了新代码,以使差异变得明显

<script type="text/javascript">
var options = { series: { pie: {show: true} } };
$(document).ready(function () {
    $.ajax({
        type: "POST",
        url: "server_processing.aspx/GetPieData",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            //var jsObj = [];
            //jsObj.push($.parseJSON(msg.d));
            var data = ($.parseJSON(msg.d);
            $.plot($("#piechart"), data, options);
        }
    });
});
</script>

//server_processing.aspx.cs
    [WebMethod]
    public static string GetPieData()
    {
        List<PieData> pieData = new List<PieData>();
        pieData.Add(new PieData { label = "A", data = 40 });
        pieData.Add(new PieData { label = "B", data = 40 });
        pieData.Add(new PieData { label = "C", data = 20 });

        JavaScriptSerializer js = new JavaScriptSerializer();
        string returnArray = js.Serialize(pieData);
        return returnArray;

        //var serializer = new JsonSerializer();
        //var stringWriter = new StringWriter();
        //var writer = new JsonTextWriter(stringWriter);
        //writer.QuoteName = false;
        //serializer.Serialize(writer, pieData);
        //writer.Close();
        //var json = stringWriter.ToString();
        //return json;
    }

var options={series:{pie:{show:true}}};
$(文档).ready(函数(){
$.ajax({
类型:“POST”,
url:“server_processing.aspx/GetPieData”,
数据:“{}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(msg){
//var jsObj=[];
//jsObj.push($.parseJSON(msg.d));
var data=($.parseJSON(msg.d);
$.plot($(“#piechart”)、数据、选项);
}
});
});
//server_processing.aspx.cs
[网络方法]
公共静态字符串GetPieData()
{
List pieData=新列表();
添加(新的pieData{label=“A”,data=40});
添加(新的pieData{label=“B”,data=40});
添加(新的pieData{label=“C”,data=20});
JavaScriptSerializer js=新的JavaScriptSerializer();
字符串returnArray=js.Serialize(pieData);
返回数组;
//var serializer=new JsonSerializer();
//var stringWriter=新的stringWriter();
//var writer=新的JsonTextWriter(stringWriter);
//writer.QuoteName=false;
//序列化(writer,pieData);
//writer.Close();
//var json=stringWriter.ToString();
//返回json;
}

因为,我正在将解析后的数据推送到已经初始化的数组中。似乎数据被推送到了第一个索引上,这对于Flot饼图来说是不可接受的格式,因此,屏幕上出现了异常和无饼图。请随意更正我的解释。

您能将jsObj登录到控制台并向我们确切显示数据的外观吗?实际上,这是发生错误的那一行。当解析为JSON时。但是在Internet Explorer控制台中,对于发送的数据,
msg
我得到了
[object]
。您可能应该在问题中提到有一个错误,并提供有关它的任何信息;您描述问题的方式听起来像是绘图在默默地失败。另外,记录msg.d,因为这就是正在分析的内容。
msg.d=[{label:“A”,data:40},{label:“B”,data:40},{label:“C”,data:20}]
。它与Flot Pie所需的数据相匹配。您能告诉我哪里出了问题吗?