我正在从网上带有单行数据(从SP返回的行)的样本中抓取一些代码,并使用JSON对象序列化程序将其发送回客户端aspx javascript页面。为了让您了解数据的构建方式......
public static string GetLogEntry(DataTable table, string id)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
foreach (DataRow dr in table.Select("UID =" + id))
// foreach (DataRow dr in table.Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in table.Columns)
{
row.Add(col.ColumnName, dr[col]);
}
rows.Add(row);
}
var json = jss.Serialize(rows);
return json;
我知道我在这里有一个不必要的循环,因为这个特定的SP只能返回一行。我将在下一章中讨论这个问题。我真正的问题是我不明白如何提取我需要的数据。
我的客户端循环正在返回数据,但我很难单独引用特定的列数据。
success: function (json) { //ajax call success function
var obj = jQuery.parseJSON(json); // this line isn't really doing anything right now
eval("var datax = " + json);
for (var propertyName in $(datax)[0]) {
alert('data: ' + propertyName ); } //this returns only the column names
$(data).each(function (key, val) {
for (var propertyName in val) {
alert('data: ' + val[propertyName]); }
所以我想要做的是按照我在其他示例中看到的列名访问元素....
alert(json.columnName) //returns undefine.
提前感谢您的时间。
答案 0 :(得分:0)
根据您的ajax调用的方式,成功处理程序中的变量json
已经是一个javascript对象文字。
function successHandler(resp){
var data = resp;
$.each(data, function (index, row){
var key;
foreach (key in row){
if (row.hasOwnProperty(key)){
console.log(key, row[key]);
}
}
});
}
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "some url",
data: "{}",
dataType: "json"
}).done(successHandler);
如果您可以发布服务器返回的数据,那将会有很大帮助。这将使我们了解json
的结构。
因此,不应该使用eval
或解析服务器响应。
顺便说一句,没有JSON object这样的东西。 JSON只是一种序列化和传递javascript对象文字的格式。以下,
var data = new List<Dictionary<string, object>>
{
new Dictionary<string, object>
{
{ "Col1", 1.0}, { "Col2", 2.0}
},
new Dictionary<string, object>
{
{ "Col1", 1.1}, { "Col2", 2.2}
},
};
将按照JSON格式转换为以下字符串:
"[{\"Col1\":1,\"Col2\":2},{\"Col1\":1.1,\"Col2\":2.2}]"
jQuery ajax将自动解析此字符串并将结果数组传递给成功处理程序。为此,需要告诉jquery期望json
数据,服务器需要发回一个mimetype application/json; charset=utf-8
的字符串