1

サーバーからクライアントに渡すデータは 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);
        }
    });
});

Flot Line Chart についても同じことを行ったところ、完全に機能しました。誰かが私が間違っているところを親切に指摘してもらえますか?

4

1 に答える 1

0

私は問題を発見しました。以前のコードをコメントアウトし、新しいコードを挿入して違いを明確にしました。

<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;
    }

それ以来、解析済みのデータを既に初期化されている配列にプッシュしていました。データが最初のインデックスにプッシュされているように見えましたが、これはフロット パイでは受け入れられない形式であるため、例外が発生し、画面に円グラフが表示されませんでした。私の説明を自由に修正してください。

于 2013-03-21T09:05:06.440 に答える