如何使用 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