javascript - 为什么我无法使用 JSON 数据?

标签 javascript c# asp.net sql-server json

我正在尝试从 AJAX 函数读取一些 JSON 数据。这是我正在使用的 AJAX:

             $.ajax({
                type: 'POST',
                cache: false,
                url: 'Default.aspx/GetCoords',
                data: "{}",
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function (data) {
                    var text = JSON.stringify(data);
                    $("#jsonData").html(text);
                    alert(text);
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    alert(xhr.status);
                    alert(thrownError);
                }
            });

我还使用 JSON.parse 代替 stringify,并且对象返回未定义或根本不返回。这来自一个 C# 函数,如下所示:

    [WebMethod]
    [ScriptMethod]
    public static string GetCoords()
    {
        DataTable dt = new DataTable();
        using (SqlConnection con = new SqlConnection(connectionString))
        {
            using (SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM DRAW ORDER BY DrawID DESC;", con))
            {
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
                Dictionary<string, object> row;
                foreach (DataRow dr in dt.Rows)
                {
                    row = new Dictionary<string, object>();
                    foreach (DataColumn col in dt.Columns)
                    {
                        row.Add(col.ColumnName, dr[col]);
                    }
                    rows.Add(row);
                }
                System.Diagnostics.Debug.WriteLine(serializer.Serialize(rows));
                return serializer.Serialize(rows);                
            }
        }
    }

它返回 JSON 数据:这是调试器控制台上的样子以及当我在段落标记中调用该函数时的样子:

[{"DrawID":925,"xCoord":466,"yCoord":201},{"DrawID":924,"xCoord":385,"yCoord":318},{"DrawID":923,"xCoord":768,"yCoord":159},{"DrawID":922,"xCoord":543,"yCoord":214},{"DrawID":921,"xCoord":329,"yCoord":172}]

但是,当我将它发送到 JQuery 中的段落标记或在 HTML 段落中调用它时,它的样子如下:

{"d":"[{\"DrawID\":925,\"xCoord\":466,\"yCoord\":201},{\"DrawID\":924,\"xCoord\":385,\"yCoord\":318},{\"DrawID\":923,\"xCoord\":768,\"yCoord\":159},{\"DrawID\":922,\"xCoord\":543,\"yCoord\":214},{\"DrawID\":921,\"xCoord\":329,\"yCoord\":172}]"}

我有两个问题: (1) 为什么我无法使用此数据将 xCoords 和 yCoords 插入 Canvas ?我尝试过多种格式:(data.d[0].xCoord、d[0].xCoord、text.d[0].xCoord、text[0].xCoord 等)。 (2) 尝试提取数据以在 Canvas 上绘画时,上面的第二种格式是否会成为问题(我想知道的是反斜杠)?

谢谢。

最佳答案

在您的 success 函数中,您不会对“data”变量进行字符串化或 json.Parse,而是对 data.d 变量进行字符串化或 json.Parse。 'd' 是您需要解析的 json 返回的成员。

因此,将 var text = JSON.stringify(data); 更改为 var text = JSON.stringify(data.d); 你应该是黄金了。

关于javascript - 为什么我无法使用 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463622/

相关文章:

javascript - 嵌套动态高度过渡效果

javascript - 将日期值转换为时间戳 - 发布请求 - Ember.js

javascript - 单击 div 时显示表单

c# - 没有安装 Entity Framework 驱动程序的 DMS?

c# 填充 datagridview 非常慢

javascript - 无法使用 Javascript 重定向到另一个页面

javascript - TableRow 中的隐藏字段 aspx

javascript - Twitter Bootstrap 选项卡内容始终显示

c# - IEnumerable 集合列表

asp.net - Microsoft 重写模块 - 在 url 上强制 www 或从 url 中删除 www