0

我正在从网络上的样本中抓取一些代码,这些代码采用单行数据(从 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.

在此先感谢您的时间。

4

1 回答 1

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

于 2013-07-29T03:06:19.733 回答