【发布时间】:2015-04-12 08:54:40
【问题描述】:
我正在尝试从 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 插入画布?我尝试了许多格式:(data.d[0].xCoord、d[0].xCoord、text.d[0].xCoord、text[0].xCoord 等)。 (2) 上面的第二种格式在尝试提取数据以在画布上绘画时是否会出现问题(我想知道的是反斜杠)?
谢谢。
【问题讨论】:
-
你为什么要返回字符串?如果您返回行会更容易。
-
在您的文档准备好之前,您的 Ajax 调用可能正在返回。确保您在
$(document).ready(/*here8/);中调用该 ajax 函数,以确保您的#jsonData在您尝试显示它时可用。 -
你能给我举个例子@lujcon吗?
标签: javascript c# asp.net sql-server json