Я работаю с двумя услугами api rest. первый получит предметы из списка под названием "Основная категория", как показано ниже: -
/test/_api/web/lists/getbytitle('MainCategory')/items?$select=Title
и он вернет следующий json: -
{
"d": {
"results": [
{
"FileSystemObjectType": 0,
"Id": 15,
"ID": 15,
"ContentTypeId": "0x010006DDBDD3BDC9914B92E911733F2A56E1",
"Title": "A",
"Modified": "2017-03-01T12:08:35Z",
"Created": "2017-03-01T12:08:35Z",
"AuthorId": 1,
"EditorId": 1,
"OData__UIVersionString": "1.0",
"Attachments": false,
"GUID": "c93d9db6-efd8-4b49-9024-f8cc30c0a48e"
},
{
"FileSystemObjectType": 0,
"Id": 16,
"ID": 16,
"ContentTypeId": "0x010006DDBDD3BDC9914B92E911733F2A56E1",
"Title": "B",
"Modified": "2017-03-01T12:10:27Z",
"Created": "2017-03-01T12:10:27Z",
"AuthorId": 1,
"EditorId": 1,
"OData__UIVersionString": "1.0",
"Attachments": false,
"GUID": "a023853c-e967-4db8-8414-a7c390dcc09a"
},
и у меня есть другой список с именем Pages
, где каждая страница связана с элементом основной категории.
/test/_api/web/lists/getbytitle('pages')/items??$select=Title,MainCategory&$filter=MainCategory eq
здесь возвращается json: -
{
"d": {
"results": [
{
"Title": "Home",
"MainCategory": "A"
},
{
"Title": "ewrwe",
"MainCategory": "A"
},
{
"Title": "tgtg",
"MainCategory": "A"
},
{
"Title": "dsdfsfdfsdfsdfsdfsdsdfsd",
"MainCategory": "A"
},
{
"Title": "jk",
"MainCategory": "A"
}
]
}
}
теперь я хочу показать таблицу, которая показывает количество страниц под каждой категорией. поэтому я выполнил следующие действия, которые выполняют следующие действия: -
- получить все основные категории.
- для каждой основной категории выполните другой вызов списка страниц, чтобы получить связанные страницы и подсчитать результат.
вот мой script: -
<script>
$(document).ready(function() {
function getCurrentMainCategoryID() {
var results = "";
var html = "";
html = "<table style='margin-left:20%;width:50%;boarder:3px solid'><th style='text-align:left'>Main Category</th><th></th><th style='text-align:left'>Pages</th>";
var url = "/test/_api/web/lists/getbytitle('MainCategory')/items?$select=Title";
$.ajax({
url: url,
method: "GET",
async: false,
headers: {
"Accept": "application/json; odata=verbose"
},
success: function(data) {
if (data.d.results.length > 0) {
results = data.d.results;
for (var j2 = 0; j2 < results.length; j2++) {
var currentMainCatTitle = results[j2].Title;
$.ajax({
url: "/test/_api/web/lists/getbytitle('pages')/items??$select=Title,MainCategory&$filter=MainCategory eq " + "'" + currentMainCatTitle + "'",
method: "GET",
async: false,
headers: {
"Accept": "application/json; odata=verbose"
},
success: function(data) {
if (data.d.results.length > 0) {
html = html + "<tr><td>" + "</td>" + "<td> </td><td>" + data.d.results.length + "</td></tr>";
}
},
error: function(data) {
}
});
}
}
},
error: function(data) {
}
});
$("#inserthere").after(html + "</table>");
return results;
}
getCurrentMainCategoryID();
});
</script>
теперь мой script покажет правильный результат. но я столкнулся с проблемой производительности, так как я инициирую отдельный вызов для каждой основной категории. поэтому я не уверен, могу ли я изменить свой script, чтобы сделать следующее: -
- получить все основные категории (как я это делаю сейчас).
- получить все страницы сразу. вместо того, чтобы отдельно получать страницы для каждой основной категории.
- внутри script для группировки страниц в соответствии с их основной категорией. и сохранить результаты внутри временной переменной
- перебирает элементы основной категории и для каждого элемента основной категории получает свой счет из переменной temp на шаге 3...
может ли кто-нибудь посоветовать это, пожалуйста? как я могу сгруппировать мой json на основе основной категории?