使用查詢列獲取列表項

有時,你可能有一個如下所示的列表結構:

動物清單表

名稱 型別 描述
標題 字串(文字) 動物的名字
年齡 動物多大了
貨幣 動物的價值
型別 查詢(動物型別表) 查詢欄位(提供動物型別表中的選項下拉選單)

動物型別表

名稱 型別 描述
標題 字串(文字) 物種/動物型別的名稱(例如豬)
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();