【问题标题】:getByTitle() is not returning Sharepoint ListgetByTitle() 没有返回 Sharepoint 列表
【发布时间】:2018-01-18 12:17:59
【问题描述】:

我正在尝试使用 ajax 调用从 Jquery 中获取几个 SharePoint(2013) 列表,如下所示

$.ajax({
url: url + "/_api/web/lists/getbytitle('" + listname + "')/items?$top="+maxReturnedRows,
method: "GET",
async: false,
headers: { "Accept": "application/json; odata=verbose" },
success: function (data) {

        listArray = data.d.results;         

    },
error: function (data) {
    alert('Error in AJAX-Call to '+listname);
    failure(data);
}

});

其中 url 包含 SharePoint 网站的 URL。 这个电话给了我以下错误,

错误代码:-1,System.Collections.Generic.KeyNotFoundException 错误消息:给定的键不在字典中。

JSON 响应:-

"{\"error\":{\"code\":\"-1, System.Collections.Generic.KeyNotFoundException\",\"message\":{\"lang\":\"de-DE\",\"value\":\"The given key was not present in the dictionary.\"}}}"

我已尝试使用以下 URL 在浏览器中调试问题

 <baseurl>+ "/_api/web/lists/getbytitle('" + listname + "')

我收到了带有 List Metada 的 XML 响应,但如果我尝试使用以下 URL 获取该列表中的项目,

<baseurl> + "/_api/web/lists/getbytitle('" + listname + "')/Items

我收到 500 错误,我怀疑是因为同样的问题。

作为另一种选择,尝试使用 'guid' 获取相同的列表,如下所示,

    <baseurl>/_api/Web/Lists(guid'xxxxxxxxxxxxxxx')

如果我尝试访问此列表的项目,它正在工作,我收到错误 500

<baseurl>/_api/Web/Lists(guid'xxxxxxxxxxxxxxx')/Iems

请告诉我,如何解决此问题。

提前致谢

【问题讨论】:

    标签: javascript jquery ajax list sharepoint-2013


    【解决方案1】:

    一个列表有两个“名称”。首次通过 UI 创建时,输入的名称用作根 URL 和标题。然后您可以更改列表的标题,但 URL 保持不变。

    这是从 PowerShell 中重命名列表的属性的样子,该列表创建为“Cars2”,然后重命名:

    PS C:\> $calcdemo.lists["Cars for sale"] | select title,rootfolder
    
    Title         RootFolder
    -----         ----------
    Cars For Sale Lists/Cars2
    

    由于 REST“getByTitle”使用的是 title 属性而不是 URL,因此在您的示例代码中,“listname”变量需要是“Cars for sale”,而不是“Cars2”。

    此外,如果列表标题包含 Unicode 字符,您可能需要转义这些字符。

    【讨论】:

    • 感谢 Mike 的回复,我很抱歉,但我认为我的问题并不明确和具体。我已经用更具体的错误更新了问题文本。
    • 是什么样的列表?
    • 您列出的 API URL 在我的列表和项目中运行良好。您是否使用同一站点中的其他列表对其进行了测试?列表的标题/名称是什么? “listname”变量是一个简单的字符串吗?没有换行符或其他特殊字符。我有一个可能会有所帮助的 SharePoint REST 测试器:techtrainingnotes.blogspot.com/2017/04/…
    • 我已经用其他列表进行了测试,它对他们有用。对于那些不起作用的列表,这些只是两个列表。这些是由模板创建的用户定义列表。这些列表名称(标题)包含下划线(_),但我创建了具有相同模板的新列表并尝试给出更简单的名称(只有文本没有空格,没有特殊字符),但它仍然不起作用。我注意到直到列表为空,其余服务不会失败并返回并清空 XML,但是一旦我将数据放入列表中,它就会开始出现此错误。
    • 可能是专栏有问题。尝试只带回一两列,看看是否有效。 $select=标题
    【解决方案2】:
    url: url + "/_api/web/lists/getbytitle('" + listname + "')/items?$top="+maxReturnedRows,
    

    您应该通过 guid 获取列表项:

    例如:

     /_api/web/lists('%7B326038AE-D47E-454D-AAD4-5440E6133EF2%7D')
    

    【讨论】:

      猜你喜欢
      • 2015-04-03
      • 1970-01-01
      • 2021-01-12
      • 2016-01-03
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2020-05-15
      相关资源
      最近更新 更多