Jquery Datatables Ajax Response
Я пытаюсь следовать приведенному здесь примеру источника данных (объектов) Ajax. Я использую asp.net и у меня есть следующий обработчик, который получает мои данные, обрабатывает их и предоставляет ответ.
public class UsersHandler : IHttpHandler
{
private const string JsHeader = @"{{""data"" {0}}}";
public void ProcessRequest(HttpContext context)
{
IEnumerable<SystemUser> data = SystemUserLogic.LoadAllSystemUsers();
List<SimpleUser> userlist = new List<SimpleUser>();
foreach (SystemUser su in data)
{
SimpleUser simple = new SimpleUser();
simple.Id = su.Id;
simple.FullName = su.NameFirst;
simple.Email = "example@email.co.uk";
userlist.Add(simple);
}
string json = JsonConvert.SerializeObject(userlist, Formatting.Indented);
context.Response.ContentType = "text/plain";
context.Response.ContentEncoding = Encoding.UTF8;
context.Response.Cache.SetNoStore();
context.Response.Expires = -1;
context.Response.Write(String.Format(JsHeader, json));
}
который доставляет правильный ответ, когда я ловлю его в браузере и просматриваю данные через сетевой трафик. Моя страница aspx содержит следующее.
$('#table_id').DataTable({
"ajax": '/Handlers_New/UsersHandler.ashx',
"columns": [
{ "data": "Id" },
{ "data": "FullName" },
{ "data": "Email" },
{ "data": "KeyResource" }
]
});
Однако, когда страница загружается, я получаю эту ошибку:
Предупреждение DataTables: table id=table_id - Неверный ответ JSON. Для получения дополнительной информации об этой ошибке, пожалуйста, смотрите http://datatables.net/tn/1
Выводимые данные выглядят так,
{"data" [
{
"Id": 1,
"FullName": "Admin",
"Email": "example@email.co.uk",
"KeyResource": false
},
{
"Id": 2,
"FullName": "Jon",
"Email": "example@email.co.uk",
"KeyResource": false
},
{
"Id": 3,
"FullName": "Stephen",
"Email": "example@email.co.uk",
"KeyResource": false
}, etc.....
Пожалуйста, скажите мне, почему я получаю эту ошибку. Должен ли я манипулировать объектом json по-другому, или я что-то упускаю в таблицах данных Jquery?
1 ответ
Мне удалось исправить мою проблему удивительно благодаря jsonlint. Я пропустил свой код и оказалось, что в моем jsHeader пропущен символ ":". Итак, что у меня было:
private const string JsHeader = @"{{""data"" {0}}}";
и то, что у меня сейчас, что сейчас работает, это:
private const string JsHeader = @"{{""data"": {0}}}";
Надеюсь, что это поможет любому другому, сталкивающемуся с подобной проблемой.