如何读取包含用户定义类的对象数组的JSON响应
本文关键字:对象 数组 响应 JSON 定义 用户 何读取 读取 包含 | 更新日期: 2023-09-27 17:51:22
我正在开发一个ASP。. NET WebForms网站,使用JQuery从ASP. NET中获取一些数据。. 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
也可以有null变量
jQuery的。html是一个方法。通过将新值作为参数传递,可以将其用作setter:
$('#responsecontainer').html(data.responseJSON[i].Title);
但是这将迭代地用数据中的每个. title填充#responsecontainer。reponseJSON对象,每个。title替换最后一个。title,所以您只会看到最后一个。title。您可能想要附加:
$('#responsecontainer').append(data.responseJSON[i].Title);
以这种方式返回它你真的在data对象上有responseJSON属性吗?
根据我的经验返回它的方式,我已经得到了结果直接在数据对象:
$(data).each(function (i) {
$('#responsecontainer').append(data[i].Title);
});
问题是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);
});
}
现在它工作了。感谢所有回答我问题的人。你的回答给了我这个提示。:)