8

我正在尝试从休息呼叫中过滤我的结果。

$.ajax({
    type: "GET",
    headers: {
        "Accept": "application/json;odata=verbose"
    },
    dataType: "JSON",
    url: _spPageContextInfo.webServerRelativeUrl + "/_api/lists/getByTitle('Contacts')/items?$select=Title,Id&$startswith('Title','" + request.term + "') eq true",
    success: function (data) {
    },
    error: function (ex) {
    }
});

在我的联系人列表中,我试图检索以字符串开头或其中包含字符串的项目的标题和 ID,例如这里是某人的姓名。

我也用 substringof 试过:

"/_api/lists/getByTitle('Contacts')/items?$select=Title,Id&$substringof(" + request.term + ",'Title') eq true"

这也提供了相同的结果。

它给了我列表中的所有列表项,并且没有应用过滤。在查看此处使用 SharePoint 2013 REST 服务进行编程后,我为其余部分构建了 Url 就像那里给出的架构一样,我认为 Url 看起来不错,但似乎不是这样

编辑:

在 OData Uri 约定中应用$filter类似的内容会给我以下错误:

{"error":{"code":"-1, Microsoft.SharePoint.SPException","message":{"lang":"en-US","value":"The query is not valid."}}}

尝试使用以下查询字符串:

_api/lists/getByTitle('Contacts')/items?$select=Title,Id&$filter=substringof(m,'Title') eq true

_api/lists/getByTitle('Contacts')/items?$select=Title,Id&$filter=substringof('m','Title') eq true

_api/lists/getByTitle('Contacts')/items?$select=Title,Id&$filter=substringof('m',Title) eq true
4

5 回答 5

17

当我删除“eq true”时,我已经设法让带有 substringof 的过滤器返回正确的结果。

使用您的查询字符串之一,它应该像这样工作:

_api/lists/getByTitle('Contacts')/items?$select=Title,Id&$filter=substringof('m',Title)

我没有检查任何其他函数,但至少,startswith 函数也是如此。

于 2013-08-08T13:27:24.130 回答
10

对于任何查看此问题的人,我可以报告

/_api/web/lists/GetByTitle('Applications')/items?$filter=startswith(Title,'1AAJ') 

正在为我工​​作。

于 2015-03-19T21:44:41.723 回答
0

我在端点上尝试了您的查询 URI 并应用了一些更改: - 子字符串的第二个参数不应该是字符串,所以我删除了撇号

在此之后,我得到结果:

http://jaydata.org/examples/Northwind.svc/Products ?$select=Product_ID,Product_Name&$filter=substringof('CH',Product_Name)

我的端点是标准的 WCF 数据服务,并且过滤器正在工作。

如果更改 URI 仍然返回所有记录,我猜这将是一个 SherePoint 技巧。如果你在过滤器中加入 'zzz' 或一些随机字符串会发生什么?

于 2013-05-10T15:00:13.833 回答
0

检查http://www.odata.org/documentation/odata-v2-documentation/uri-conventions/以了解正确的 uri 约定。

应该

/_api/lists/getByTitle('Contacts')     
/items?$select=Title,Id&$filter=substringof(" + request.term + ",'Title') eq true"

所以包含 $filter

于 2013-04-19T14:34:47.853 回答
-1

此外, contains 方法有效,并且我与它有更好的兼容性。语法是:

api/People?$filter=contains(LastName,%27Smith%27)&$select=LastName,FirstName
于 2018-02-07T17:40:02.663 回答