【发布时间】:2017-07-24 06:01:30
【问题描述】:
我正在使用 2 个 rest api 服务。第一个将从名为“主要类别”的列表中获取项目,如下所示:-
/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>
$(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>
现在我的脚本将显示正确的结果。但我面临一个性能问题,因为我正在为每个主要类别发起单独的调用。 所以我不确定我是否可以修改我的脚本来执行以下操作:-
- 获取所有主要类别(我目前正在这样做)。
- 一次获取所有页面。而不是单独获取每个主要类别的页面..
- 在脚本中根据页面的主要类别对页面进行分组。并将结果存储在临时变量中
- 遍历主要类别项目,并为每个主要类别项目从第 3 步中的 temp 变量中获取其计数...
请问有人可以就此提出建议吗?如何根据主要类别对我的 json 进行分组?
【问题讨论】:
-
您获得了多少个类别?是不是结果太多?也许你可以为你的桌子使用分页
-
@Gonzalo.- 这不是关于我有多少类别,而是关于为每个类别进行单独的 api 调用......这效率不高......所以我想得到所有页面使用单个 api 调用,并在 javascript 本身上进行过滤
-
@johnG 检查我的答案。我希望它会按照您的期望工作。
-
如果您拥有该 API,请考虑实施 GraphQL。做你要求的事情会变得愚蠢。
-
如果您使用基于 SQL 的数据存储,最好的办法是在一个查询中获取所有数据(使用 JOIN)。如果您使用像 sequelize 这样的库,它会为您完成所有繁重的工作。然后,您可以创建视图和索引以在 db 级别优化此查询。
标签: javascript jquery json rest