有时,您的列表结构可能如下所示:
名称 | 类型 | 描述 |
---|---|---|
标题 | 字串(文字) | 动物的名字 |
年龄 | 数 | 动物多大了 |
值 | 货币 | 动物的价值 |
类型 | 查找(动物类型表) | 查找字段(从“动物类型”表中选择下拉菜单) |
名称 | 类型 | 描述 |
---|---|---|
标题 | 字串(文字) | 物种名称/动物类型(例如猪) |
坚果 | 数 | 动物的腿数 |
可能不是最严重的示例,但是这里的问题仍然有效。当您使用常规请求从SharePoint列表中检索值时,对于Type动物的,您将仅取回TypeIdJSON响应中称为的字段。为了仅通过单个AJAX调用即可扩展这些项目,URL参数中需要一些额外的标记。
这个例子不仅适用于查找列。当您使用People/Groups列,他们基本上只是查找为好,这样可以拉动项目,如Title,EMail和其他人很容易。
重要说明:定义要从查询列中取回的字段时,必须在原始表中以该字段的名称为前缀。例如,如果NumLegs要从查找列取回属性,则必须键入Type/NumLegs。
的JavaScript
// webUrl: The url of the site (ex. https://www.contoso.com/sites/animals) // listTitle:要查询的列表的名称 // selectFields:您要取回的特定字段 // expandFields:需要从查找表中拉出的字段的名称 // callback:成功时回调函数的名称 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); } // 通过将所有参数设置为getItems函数来设置ajax请求 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); } // 回调功能 // 数据:返回SharePoint提供的数据 function processAnimals(data) { console.log(data); // 在这里处理数据 } // 开始整个过程 getAnimals();