如何:使用 JavaScript 检索列表

上次修改时间: 2011年6月20日

适用范围: SharePoint Foundation 2010

本文内容
使用 JavaScript 检索网站中所有列表的全部属性
使用 JavaScript 只检索列表的指定属性
在集合中存储检索到的列表
向列表检索应用筛选器
使用 JavaScript 检索网站中的列表字段

通过 ECMAScript(JavaScript、JScript)使用列表对象与使用网站对象类似。首先使用 ClientContext(serverRelativeUrl) 构造函数并传递 URL 或 URI 以返回特定的请求上下文。然后,可以使用 Web 类的 lists 属性获取网站中列表的集合。

使用 JavaScript 检索网站中所有列表的全部属性

若要返回网站的所有列表,可通过 load(clientObject) 方法加载列表集合,然后调用 executeQueryAsync(succeededCallback, failedCallback)。以下示例显示网站的 URL 以及创建列表的日期和时间。

var siteUrl = '/sites/MySiteCollection';

function retrieveAllListProperties() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    this.collList = oWebsite.get_lists();
 
    clientContext.load(collList);

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {

    var listInfo = '';

    var listEnumerator = collList.getEnumerator();

    while (listEnumerator.moveNext()) {
        var oList = listEnumerator.get_current();
        listInfo += 'Title: ' + oList.get_title() + ' Created: ' + oList.get_created().toString() + '\n';
    }
    alert(listInfo);
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

使用 JavaScript 只检索列表的指定属性

上面的示例返回网站中列表的所有属性。若要减少客户端和服务器之间不必要的数据传输,可以使用 LINQ 查询表达式指定要返回的属性。在 JavaScript 中,可以指定 Include 作为传递给 load(clientObject) 方法的查询字符串的一部分,以便指定要返回的属性。下面的示例使用该方法只返回集合中每个列表的标题和 ID。

var siteUrl = '/sites/MySiteCollection';

function retrieveSpecificListProperties() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    this.collList = oWebsite.get_lists();

    clientContext.load(collList, 'Include(Title, Id)');

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {

    var listInfo = '';

    var listEnumerator = collList.getEnumerator();

    while (listEnumerator.moveNext()) {
        var oList = listEnumerator.get_current();
        listInfo += 'Title: ' + oList.get_title() + ' ID: ' + oList.get_id().toString() + '\n';
    }
    alert(listInfo);
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

在上面的示例中,在调用 executeQueryAsync(succeededCallback, failedCallback) 后,只有每个列表对象的标题和 ID 变得可用。如果尝试显示 oList.ParentWebUrl 等内容,您将会收到 PropertyOrFieldNotInitializedException

在集合中存储检索到的列表

如以下示例所示,可以使用 loadQuery(clientObjectCollection, exp) 方法而不是 load(clientObject) 方法来在另一集合中存储返回值,而不是将其存储在 lists 属性中。

var siteUrl = '/sites/MySiteCollection';

function retrieveSpecificListPropertiesToCollection() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    var collList = oWebsite.get_lists();

    this.listInfoCollection = clientContext.loadQuery(collList, 'Include(Title, Id)');

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {

    var listInfo = '';

    for (var i = 0; i < this.listInfoCollection.length; i++) {
        var oList = this.listInfoCollection[i];
        listInfo += 'Title: ' + oList.get_title() + ' ID: ' + oList.get_id().toString();
    }
    alert(listInfo.toString());
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

向列表检索应用筛选器

Microsoft SharePoint Foundation 2010 中 JavaScript 对象模型的 loadQuery(clientObjectCollection, exp) 方法不支持托管对象模型使用的 LINQ 方法和操作。

使用 JavaScript 检索网站中的列表字段

如以下示例所示,可以将 Include 语句嵌套在 JavaScript 查询中,以返回列表及其字段的元数据。该示例返回网站中所有列表的所有字段,并显示其内部名称包含字符串"name"的所有字段的标题和内部名称。

var siteUrl = '/sites/MySiteCollection';

function retrieveAllListsAllFields() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    var rootWebsite = clientContext.get_site().get_rootWeb();
    var collList = oWebsite.get_lists();

    this.listInfoArray = clientContext.loadQuery(collList, 
        'Include(Title,Fields.Include(Title,InternalName))');

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), 
        Function.createDelegate(this, this._onQueryFailed));
}

function onQuerySucceeded() {

    var listInfo = '';

    for (var i = 0; i < this.listInfoArray.length; i++) {
            
        var oList = this.listInfoArray[i];
        var collField = oList.get_fields();
            
        var fieldEnumerator = collField.getEnumerator();
            
        while (fieldEnumerator.moveNext()) {
            var oField = fieldEnumerator.get_current();
            var regEx = new RegExp('name', 'ig');
            
            if (regEx.test(oField.get_internalName())) {
                listInfo += '\nList: ' + oList.get_title() + 
                    '\n\tField Title: ' + oField.get_title() + 
                    '\n\tField Name: ' + oField.get_internalName();
            }
        }
    }
    alert(listInfo);
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

请参阅

概念

数据检索概述

客户端对象模型准则

如何:使用 JavaScript 创建、更新和删除列表

JavaScript 对象模型中的常见编程任务

其他资源

ECMAScript 类库