使用查詢列獲取列表項
有時,你可能有一個如下所示的列表結構:
動物清單表
名稱 | 型別 | 描述 |
---|---|---|
標題 | 字串(文字) | 動物的名字 |
年齡 | 數 | 動物多大了 |
值 | 貨幣 | 動物的價值 |
型別 | 查詢(動物型別表) | 查詢欄位(提供動物型別表中的選項下拉選單) |
動物型別表
名稱 | 型別 | 描述 |
---|---|---|
標題 | 字串(文字) | 物種/動物型別的名稱(例如豬) |
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();