Я разрабатываю веб-сайт ASP.NET WebForms, который использует JQuery для извлечения некоторых данных из обработчика ASHX ASP.NET. Эти данные представляют собой массив объектов класса, который определяется пользователем. Ниже приведен код обработчика:
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
может иметь нулевые переменные.
Проблема заключалась в разборе 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);
});
}
И теперь его работа. Спасибо всем, кто ответил на мой вопрос. Ваши ответы дали мне этот намек. :)
jQuery.html - это метод. Вы используете его как сеттер, передавая новое значение в качестве аргумента:
$('#responsecontainer').html(data.responseJSON[i].Title);
Но это будет итеративно заполнять #responsecontainer каждым.Title в ваших объектах data.reponseJSON, причем каждый.Title заменяет последний.Title, поэтому вы будете видеть только последний.Title. Вероятно, вы хотите добавить:
$('#responsecontainer').append(data.responseJSON[i].Title);
Возвращая его таким образом, у вас действительно есть свойство responseJSON на объекте данных?
по моему опыту, возвращающему его таким образом, у меня есть результаты непосредственно на объекте данных:
$(data).each(function (i) {
$('#responsecontainer').append(data[i].Title);
});