使用查找列获取列表项
有时,你可能有一个如下所示的列表结构:
动物清单表
名称 | 类型 | 描述 |
---|---|---|
标题 | 字符串(文字) | 动物的名字 |
年龄 | 数 | 动物多大了 |
值 | 货币 | 动物的价值 |
类型 | 查找(动物类型表) | 查找字段(提供动物类型表中的选项下拉列表) |
动物类型表
名称 | 类型 | 描述 |
---|---|---|
标题 | 字符串(文字) | 物种/动物类型的名称(例如猪) |
NumLegs |
数 | 动物的腿数 |
可能不是最严重的例子,但这里的问题仍然有效。当你使用常规请求从 SharePoint 列表中检索值时,对于动物的 Type
,你将只返回 JSON 响应中名为 TypeId
的字段。为了在一个 AJAX 调用中扩展这些项目,URL 参数中需要一些额外的标记。
此示例不仅适用于查找列。当你使用 People/Groups
列时,它们基本上也只是查找,因此你可以轻松地提取 Title
,EMail
等项目。
示例代码
重要说明 :定义要从查阅列返回的字段时,必须在字段名称前加上原始表中查找字段的名称。例如,如果要从查阅列中取回 NumLegs
属性,则必须键入 Type/NumLegs
。
JavaScript
// webUrl: The url of the site (ex. https://www.contoso.com/sites/animals)
// listTitle: The name of the list you want to query
// selectFields: the specific fields you want to get back
// expandFields: the name of the fields that need to be pulled from lookup tables
// callback: the name of the callback function on success
function getItems(webUrl,listTitle,selectFields, expandFields, callback){
var endpointUrl = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/items";
endpointUrl+= '?$select=' + selectFields.join(",");
endpointUrl+= '&$expand=' + expandFields.join(",");
return executeRequest(endpointUrl,'GET', callback);
}
function executeRequest(url,method,callback,headers,payload)
{
if (typeof headers == 'undefined'){
headers = {};
}
headers["Accept"] = "application/json;odata=verbose";
if(method == "POST") {
headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
}
var ajaxOptions =
{
url: url,
type: method,
contentType: "application/json;odata=verbose",
headers: headers,
success: function (data) { callback(data) }
};
if(method == "POST") {
ajaxOptions.data = JSON.stringify(payload);
}
return $.ajax(ajaxOptions);
}
// Setup the ajax request by setting all of the arguments to the getItems function
function getAnimals() {
var url = "https://www.contoso.com/sites/animals";
var listTitle = "AnimalListing";
var selectFields = [
"Title",
"Age",
"Value",
"Type/Title",
"Type/NumLegs"
];
var expandFields = [
"Type/Title",
"Type/NumLegs"
];
getItems(url, listTitle, selectFields, expandFields, processAnimals);
}
// Callback function
// data: returns the data given by SharePoint
function processAnimals(data) {
console.log(data);
// Process data here
}
// Start the entire process
getAnimals();