0

Web 上のサンプルから、1 行のデータ (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 オブジェクトのようなものはありません。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 に答える