如何读取包含用户定义类的对象数组的JSON响应?

时间:2014-03-22 12:07:48

标签: c# javascript jquery asp.net json

我正在开发一个ASP.NET WebForms网站,它使用JQuery从ASP.NET ASHX处理程序中获取一些数据。此数据是用户定义的类的对象数组。以下是Handler的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Serialization;
using WRG_2._1.WRGCore;

namespace WRG_2._1.Handlers
{
    /// <summary>
    /// Summary description for ResponseFetcher
    /// </summary>
    public class ResponseFetcher : IHttpHandler, System.Web.SessionState.IReadOnlySessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            List<Topic> comments = new List<Topic>() {
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },

            };
            JavaScriptSerializer jss = new JavaScriptSerializer();
            string sJSON = jss.Serialize(comments);
            context.Response.Write(sJSON);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

    }
}

我从这样的JQuery Ajax中获取数据:

$(document).ready(function () {
            var url = '/Handlers/ResponseFetcher.ashx';
            $.ajax({
                url: url,
                type: "POST",
                data:
                    JSON.stringify({ val1: 2, val2: 3 })
                ,
                dataType: "json",
                cache: true,
                beforeSend: function () {
                    now = (new Date()).getTime();
                    if (localCache.exist(url)) {
                        tDiff = now - cacheTime;
                        if (tDiff < 20000) {
                            loadData(localCache.get(url));
                            return false;
                        }
                    }
                    return true;
                },
                complete: function (jqXHR, textStatus) {
                    localCache.set(url, jqXHR, loadData);
                }
            });

        });

        function loadData(data) {
            console.log(data);
            $(data.responseJSON).each(function (i) {

                $('#responsecontainer').html = data.responseJSON[i].Title;
            });
        }

函数loadData()正在完美地获取数据。但它没有将它添加到#responsecontainer div。请帮忙!

请注意,类Topic也可以包含空变量。

3 个答案:

答案 0 :(得分:1)

jQuery的.html是一种方法。您可以通过传递新值作为参数将其用作设置器:

$('#responsecontainer').html(data.responseJSON[i].Title);

但是这将迭代地填充#responsecontainer和data.reponseJSON对象中的每个.Title,每个.Title替换最后一个.Title,所以你只会看到最后一个.Title。您可能想要追加:

$('#responsecontainer').append(data.responseJSON[i].Title);

答案 1 :(得分:1)

以这种方式返回它,你真的在​​ data 对象上有 responseJSON 属性吗?

根据我以这种方式返回它的经验,我直接在 data 对象上得到了结果:

$(data).each(function (i) {
    $('#responsecontainer').append(data[i].Title);
});

答案 2 :(得分:0)

问题在于解析JSON响应。我将loadData()函数的代码转换为:

function loadData(data) {
            var resdata = JSON.parse(data.responseText);
            console.log(resdata[0].Title);

            $(resdata).each(function (i) {
                $('#responsecontainer').append(resdata[i].Title);
            });
        } 

现在它的工作。感谢所有回答我问题的人。你的回答给了我这个暗示。 :)