#jquery
#jquery
Вопрос:
У меня есть Json в виде
[{"id":39,"data":1},{"id":40,"data":2}]
Он неправильно анализирует с jQuery.parseJSON()
Мне нужно взять эти данные и создать html table
. Я думал о динамическом создании HTML в js.
A. Как я могу проанализировать json?
B. Является ли динамический html лучшим маршрутом?
Обновить
Я прошу прощения. Очевидно, мой вопрос не ясен. Вот jquery
$.get('Service.aspx',
{ p1: value, p2: value },
function (data) {
notesJson = data;
alert(notesJson);//Json comes back as I said here...
var noteSet = jQuery.parseJSON(notesJson);
alert(noteSet.notes);
});
примечания действительно существуют в Json.
Второе предупреждение завершается ошибкой «не определено».
Комментарии:
1. откуда берется JSON?
2. @Neal $.get запрос, отправленный в ASP.NET страница, использующая JavaScriptSerializer msdn.microsoft.com/en-us/library /…
3. $.parseJSON(‘[{«id»: 39, «data»: 1},{«id»: 40, «data»: 2}]’); работал в консоли FF для меня. Почему у вас это работает некорректно? Ошибки, нулевые объекты? Какой браузер выдает вам проблемы.
4. Вы ищете noteSet[0].примечания? на основе описания вашего формата данных noteSet будет представлять собой массив объектов.
5. @П.Брайан. Макки, я отредактировал свой ответ на основе вашего обновления
Ответ №1:
Ок, основываясь на вашем комментарии к вашему вопросу:
Используйте $.getJSON
вместо $.get
:
$.getJSON('someurl', {/*somedata*/}, function(json_data){
//no need for parsejson
//use the json_data object
var table_obj = $('table');
$.each(json_data, function(index, item){
var table_row = $('<tr>', {id: item.id});
var table_cell = $('<td>', {html: item.data});
table_row.append(table_cell);
table_obj.append(table_row);
})
})
Комментарии:
1. Вместо использования строковых литералов, как в ответе Нила, существует довольно много библиотек шаблонов javascript, которые вы можете использовать. В Microjs приведено довольно много списков, а также есть шаблоны jQuery .
2. Я использовал ваш оригинальный ответ. $.getJSON был точным и простым.
3. я откатился к этому первоначальному ответу
Ответ №2:
У вас есть массив, вам нужен объект. Попробуйте
{ "notes" : [{"id":39,"data":1},{"id":40,"data":2}] }
поскольку json
или сделайте это
alert(noteSet[0]);
alert(noteSet[1]);
Комментарии:
1. AFAIK — у меня нет контроля над способом. NET сериализует Json. Я использую класс JavaScriptSerializer в ASP.NET
2. @P.Brain Я полагаю, это потому, что вы используете функцию .get. Если вы используете .ajax, вы можете указать протокол, и это также лучше работает с .net, вы могли бы обернуть свои результаты или использовать сериализатор json.
3. @Hogan вы также можете указать протокол с помощью
.get
при передаче последнего аргумента.4. @Нил — я только что переместился во времени на 20 месяцев?
5. Да. да, ты всегда это делал ^_^
Ответ №3:
Вот еще одна хорошая библиотека для простого достижения этого: https://github.com/afshinm/Json-to-HTML-Table
Просто передайте данные JSON в эту библиотеку и получите HTML-таблицу:
//Only first parameter is required
var jsonHtmlTable = ConvertJsonToTable(objectArray, 'jsonTable', null, 'Download');
Ответ №4:
Вы говорите, что используете .NET, чтобы вы могли использовать
return Json(yourObject, JsonRequestBehavior.AllowGet);
вместо JavaScriptSerializer.
Вам не придется его анализировать.
Ответ №5:
Плагин jquery, который принимает данные JSON для заполнения таблицы, мог бы сделать. jsonTable
Ответ №6:
Вот другой способ, учитывающий заголовки таблицы для типичного запроса к базе данных. На основе ответа Нила:
$.getJSON('bower.json', {}, function(json_data) {
var table = $('table');
$.each(json_data, function(key, item) {
var table_row = $('<tr>');
$.each(item, function(itemKey, itemValue) {
if (key == 0) {
table.append($('<th>', {html: itemKey}));
}
table_row.append($('<td>', {html: itemValue}));
});
table.append(table_row);
});
});
Ответ №7:
Попробуйте этот полный код:
<head>
<script type="text/javascript">
$.getJSON('URL', function(json_data){
var table_obj = $('table');
$.each(json_data, function(index, result){
var table_row = $('<tr>', {});
var table_cell1 = $('<td>', {html: result.firstName});//result.yourDataAttributes
var table_cell2 = $('<td>', {html: result.lastName});
var table_cell3 = $('<td>', {html: result.age});
table_row.append(table_cell1,table_cell2,table_cell3);
table_obj.append(table_row);
})
});
</script>
</head>
<body>
<table id=""></table>
</body>