使用查找列获取列表项

有时,你可能有一个如下所示的列表结构:

动物清单表

名称 类型 描述
标题 字符串(文字) 动物的名字
年龄 动物多大了
货币 动物的价值
类型 查找(动物类型表) 查找字段(提供动物类型表中的选项下拉列表)

动物类型表

名称 类型 描述
标题 字符串(文字) 物种/动物类型的名称(例如猪)
NumLegs 动物的腿数

可能不是最严重的例子,但这里的问题仍然有效。当你使用常规请求从 SharePoint 列表中检索值时,对于动物的 Type,你将只返回 JSON 响应中名为 TypeId 的字段。为了在一个 AJAX 调用中扩展这些项目,URL 参数中需要一些额外的标记。

此示例不仅适用于查找列。当你使用 People/Groups 列时,它们基本上也只是查找,因此你可以轻松地提取 TitleEMail 等项目。

示例代码

重要说明 :定义要从查阅列返回的字段时,必须在字段名称前加上原始表中查找字段的名称。例如,如果要从查阅列中取回 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();