Вместо того, чтобы обращаться к вашим данным, как это ...
// does not work
"data": data,
"columns": [
{ "data": "products.productId"},
{ "data": "products.originalPrice"},
{ "data": "products.currentPrice"}
]
Измените инициализатор на это:
// works
"data": data.products,
"columns": [
{ "data": "productId"},
{ "data": "originalPrice"},
{ "data": "currentPrice"}
]
DataTable нужен итерируемый объект, который вы будете использовать, чтобы находиться вне определения столбцов (где происходит итерация).
Эти изменения работают для меня (в моей урезанной версии вашего примера).
ОБНОВЛЕНИЕ :
В соответствии с просьбой, вот несколько дополнительных деталей для объяснения ситуации:
Если вы попытаетесь использовать "data": data,
, то вы предоставляете JSON объект, который имеет эту структуру:
{"products": [an array of objects]}
Используется определениями columns
для перебора вашего JSON. Но перебирать нечего - есть только один элемент - массив.
Однако, если вы сначала углубляетесь на один уровень в своей структуре с помощью "data": data.products
, вы передаете следующее JSON к вашим определениям columns
:
[{row 1 data}, {row 2 data}, ... {row n data}]
Это может быть выполнено с помощью DataTables для заполнения каждой строки в его таблице.
Вы все еще можете перейти к каждому объекту, который повторяется, если Есть вложенные объекты. В вашем случае нет вложенных объектов - но представьте, если ваши данные выглядят так (кстати, совершенно искусственный пример):
{
"products": [{
"productId": 1,
"originalPrice": {
"currency": "USD",
"amount": 60
},
"currentPrice": 50
}, {
"productId": 2,
"originalPrice": {
"currency": "USD",
"amount": 80
},
"currentPrice": 70
}]
}
В этом случае мы можем получить доступ к данным следующим образом :
"data": data2.products,
"columns": [
{ "data" : "productId" },
{ "data" : "originalPrice.amount" },
{ "data" : "currentPrice" }
]
Здесь мы видим использование точечной нотации для детализации объекта originalPrice
, чтобы получить число, которое мы хотим отобразить: originalPrice.amount
.