如何:使用 JavaScript 检索列表项

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

适用范围: SharePoint Foundation 2010

本文内容
使用 JavaScript 检索列表项
使用 Include 方法
对检索列表项的限制

若要使用 ECMAScript(JavaScript、JScript)返回列表项,可使用 getItemById(id) 函数返回单个项,也可使用 getItems(query) 函数返回多个项。然后使用 load(clientObject) 函数获取代表这些项的列表项对象。

使用 JavaScript 检索列表项

可以使用 getItems(query) 函数定义协作应用程序标记语言 (CAML) 查询,以指定要返回哪些项。您可以传递一个未定义的 CamlQuery 对象以返回列表中的所有项,也可以使用 set_viewXml 函数定义一个 CAML 查询并返回符合特定条件的项。

以下示例显示 Announcements 列表中前 100 项的 ID 以及 Title 和 Body 列值,从集合 ID 大于 10 的列表项开始。

var siteUrl = '/sites/MySiteCollection';

function retrieveListItems() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oList = clientContext.get_web().get_lists().getByTitle('Announcements');
        
    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View><Query><Where><Geq><FieldRef Name=\'ID\'/>' + 
        '<Value Type=\'Number\'>1</Value></Geq></Where></Query><RowLimit>10</RowLimit></View>');
    this.collListItem = oList.getItems(camlQuery);
        
    clientContext.load(collListItem);
        
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));        
        
}

function onQuerySucceeded(sender, args) {

    var listItemInfo = '';

    var listItemEnumerator = collListItem.getEnumerator();
        
    while (listItemEnumerator.moveNext()) {
        var oListItem = listItemEnumerator.get_current();
        listItemInfo += '\nID: ' + oListItem.get_id() + 
            '\nTitle: ' + oListItem.get_item('Title') + 
            '\nBody: ' + oListItem.get_item('Body');
    }

    alert(listItemInfo.toString());
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

上面的示例加载 CAML 查询指定的项目集合,随后访问返回的每个列表项对象上的所有默认属性。在 ECMAScript(JavaScript、JScript)中,指定 Include 语句作为传递给 load(clientObject) 函数的查询字符串的一部分。

使用 Include 方法

在返回列表项时,ListItem 对象的以下四个属性默认情况下不可用:displayNameeffectiveBasePermissionshasUniqueRoleAssignmentsroleAssignments。如果您尝试访问其中一个属性,上面的示例将返回 PropertyOrFieldNotInitializedException。若要访问这些属性,请使用 Include 作为查询字符串的一部分。有关非默认属性的详细信息,请参阅数据检索概述

若要修改上面的示例以返回 displayNamehasUniqueRoleAssignments 的值,可以将前面对 load(clientObject) 函数的调用替换为使用 LINQ 查询的调用。在 JavaScript 中,应指定 Include。

备注

当您使用 LINQ 针对客户端对象模型创建查询时,需使用 LINQ to Objects 而不是 LINQ to SharePoint 提供程序,只有在对服务器对象模型编写代码时,才能使用 LINQ to SharePoint 提供程序。

var siteUrl = '/sites/MySiteCollection';

function retrieveListItemsInclude() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oList = clientContext.get_web().get_lists().getByTitle('Announcements');

    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View><RowLimit>100</RowLimit></View>');
    this.collListItem = oList.getItems(camlQuery);

    clientContext.load(collListItem, 'Include(Id, DisplayName, HasUniqueRoleAssignments)');

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

function onQuerySucceeded(sender, args) {

    var listItemInfo = '';
    var listItemEnumerator = collListItem.getEnumerator();
        
    while (listItemEnumerator.moveNext()) {
        var oListItem = listItemEnumerator.get_current();
        listItemInfo += '\nID: ' + oListItem.get_id() + 
            '\nDisplay name: ' + oListItem.get_displayName() + 
            '\nUnique role assignments: ' + oListItem.get_hasUniqueRoleAssignments();
    }

    alert(listItemInfo.toString());
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

因为该示例使用 Include,所以在执行查询后,只有指定的属性可用。因此,如果您尝试访问其他未指定的属性,将会收到 PropertyOrFieldNotInitializedException。此外,如果您尝试使用 get_contentType) 或 get_parentList) 等函数访问包含对象的属性,也会收到该错误。

对检索列表项的限制

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

请参阅

概念

数据检索概述

客户端对象模型准则

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

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

其他资源

ECMAScript 类库