如何使用 angular $http 服务从返回的 JSON 对象中获取 Odata Next Link
How to get Odata Next Link from the returned JSON object using angular $http service
我已经为我的网站实现了 Odata 查询语法 api。我成功地能够 return 只有前 10 个结果和 link 进一步的结果。但是,我无法从服务器使用我的 angularjs 前端 return 编辑的 JSON 对象中提取此 link。
假设服务器响应如下:
{
"odata.metadata":"http://localhost:60497/odata/$metadata#tables","value":[
{
"id":001,"name":"abc"
},{
"id":002,"name":"pqr"
},{
"id":003,"name":"xyz"
},{
.
.
.
],"odata.nextLink":"http://localhost:60497/odata/tables?$skip=10"
}
现在,我通过将 returned 数据分配给变量并使用 ng-repeat,使用 $http 的成功方法来显示数据。我分配如下:
.success(function(data)){
$scope.foo = data.value;
}
然而,当我尝试访问下一个 link 使用:
$scope.link = data.odata.nextLink;
在成功方法中它给了我一个错误。我在这里错过了什么?我还能如何访问 link returned?还有其他实现服务端分页的方法吗?
我或多或少遇到了同样的问题。我想这与 JavaScript 对象以及如何引用它们的属性有关。参考文献
data.odata.nextLink
表示有一个 属性 "odata" 和一个 sub-property/field "nextLink"。不是这样的,"odata.nextLink"是属性的名字。不知道为什么OData会这样
我通过使用字符串引用得到了这个 属性 的内容,即
data['odata.nextLink']
不知道是否有一些缺点,但似乎有效...
不要忘记 odata 值前面应该有一个 @。我不确定您的实现如何处理该字符,但它应该是一个有效的前缀。
我 运行 遇到的问题是,一些供应商使用完整路径,而一些供应商仅使用服务端点的相对路径。
using Newtonsoft.Json;
[JsonProperty("@odata.nextLink")]
public string nextPage { get; set; }
我使用
让它工作
theReturnedObject['@odata.nextLink']
我设计用于 Microsoft Graph API 的 C# 方法如下。
private static string GetNextLink ( JObject pjobjResult )
{
JProperty jtLastToken = ( JProperty ) pjobjResult.Last;
if ( jtLastToken.Name.Equals ( @"@odata.nextLink" ) )
{
return jtLastToken.Value.ToString ( );
} // TRUE (There is at least one more page.) block, if ( jtLastToken.Name.Equals ( @"@odata.nextLink" ) )
else
{
return SpecialStrings.EMPTY_STRING;
} // FALSE (The current page is the last one.) block, if ( jtLastToken.Name.Equals ( @"@odata.nextLink" ) )
} // private static string GetNextLink
在上述方法中,SpecialStrings.EMPTY_STRING 是我用来代替 string.Empty[= 的真正常量的名称21=].
类似的方法也适用于 PowerShell。
我已经为我的网站实现了 Odata 查询语法 api。我成功地能够 return 只有前 10 个结果和 link 进一步的结果。但是,我无法从服务器使用我的 angularjs 前端 return 编辑的 JSON 对象中提取此 link。
假设服务器响应如下:
{
"odata.metadata":"http://localhost:60497/odata/$metadata#tables","value":[
{
"id":001,"name":"abc"
},{
"id":002,"name":"pqr"
},{
"id":003,"name":"xyz"
},{
.
.
.
],"odata.nextLink":"http://localhost:60497/odata/tables?$skip=10"
}
现在,我通过将 returned 数据分配给变量并使用 ng-repeat,使用 $http 的成功方法来显示数据。我分配如下:
.success(function(data)){
$scope.foo = data.value;
}
然而,当我尝试访问下一个 link 使用:
$scope.link = data.odata.nextLink;
在成功方法中它给了我一个错误。我在这里错过了什么?我还能如何访问 link returned?还有其他实现服务端分页的方法吗?
我或多或少遇到了同样的问题。我想这与 JavaScript 对象以及如何引用它们的属性有关。参考文献
data.odata.nextLink
表示有一个 属性 "odata" 和一个 sub-property/field "nextLink"。不是这样的,"odata.nextLink"是属性的名字。不知道为什么OData会这样
我通过使用字符串引用得到了这个 属性 的内容,即
data['odata.nextLink']
不知道是否有一些缺点,但似乎有效...
不要忘记 odata 值前面应该有一个 @。我不确定您的实现如何处理该字符,但它应该是一个有效的前缀。
我 运行 遇到的问题是,一些供应商使用完整路径,而一些供应商仅使用服务端点的相对路径。
using Newtonsoft.Json;
[JsonProperty("@odata.nextLink")]
public string nextPage { get; set; }
我使用
让它工作theReturnedObject['@odata.nextLink']
我设计用于 Microsoft Graph API 的 C# 方法如下。
private static string GetNextLink ( JObject pjobjResult )
{
JProperty jtLastToken = ( JProperty ) pjobjResult.Last;
if ( jtLastToken.Name.Equals ( @"@odata.nextLink" ) )
{
return jtLastToken.Value.ToString ( );
} // TRUE (There is at least one more page.) block, if ( jtLastToken.Name.Equals ( @"@odata.nextLink" ) )
else
{
return SpecialStrings.EMPTY_STRING;
} // FALSE (The current page is the last one.) block, if ( jtLastToken.Name.Equals ( @"@odata.nextLink" ) )
} // private static string GetNextLink
在上述方法中,SpecialStrings.EMPTY_STRING 是我用来代替 string.Empty[= 的真正常量的名称21=].
类似的方法也适用于 PowerShell。