我正在尝试从 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/