如何通过REST结合CAML筛选SharePoint列表超链接列?报错求助
嘿,这个错误我之前也碰到过!核心问题是你调用REST API的端点选错了,而且请求的一些细节不符合SharePoint API的要求,导致服务器无法解析你的查询。
具体问题出在哪:
- 错误的API端点:你直接POST到了
/items?$select=...,但如果要用CAML查询获取列表项,正确的端点应该是列表的GetItems方法,不能在URL里加$select参数 - $select的位置不对:原本URL里的
$select应该放到ViewXml的<ViewFields>节点中,这样API才能正确识别要返回的字段
修复后的完整代码:
var project_url = _spPageContextInfo.webServerRelativeUrl; var queryText = "<Where><Contains><FieldRef Name='SiteUrl' /><Value Type='URL'>" + project_url + "</Value></Contains></Where>"; // 把要获取的字段放到ViewFields节点里,替代URL中的$select var viewXml = '<View><Query>' + queryText + '</Query><ViewFields><FieldRef Name="ID"/><FieldRef Name="Title"/><FieldRef Name="MembersId"/><FieldRef Name="AccessTYpe"/><FieldRef Name="OrganizationalUnitId"/><FieldRef Name="SiteUrl"/></ViewFields></View>'; // 修改API端点为GetItems,去掉多余的$select参数 var webserviceUrl = _spPageContextInfo.siteAbsoluteUrl + "/_api/web/Lists(guid'eb0ba220-73e8-428f-b848-92b606aa74d8')/GetItems"; var queryPayload = { 'query': { '__metadata': { 'type': 'SP.CamlQuery' }, 'ViewXml': viewXml } }; $.ajax({ url: webserviceUrl, method: "POST", data: JSON.stringify(queryPayload), headers: { "X-RequestDigest": document.getElementById("__REQUESTDIGEST").value, "Accept": "application/json; odata=verbose", "content-type": "application/json; odata=verbose" }, success: function (data) { console.log(data.d.results); // 实际的列表项数组在results里,这样打印更直观 }, error: function (data) { console.log("AllTasks Error -", data); } });
额外提醒:
- SharePoint REST API里,POST到
/items是用来创建新列表项的,而通过CAML查询获取项必须用GetItems方法 - 把字段放到
<ViewFields>里和原本的$select效果完全一致,这样请求结构才符合API的规范 - 成功回调里记得取
data.d.results,直接打印data会得到整个响应对象,里面包含很多额外信息,看实际项的话取results更方便
内容的提问来源于stack exchange,提问作者Kuldeep
相关产品推荐
相关产品推荐

