【问题标题】:Sharepoint. The collection has not been initialized共享点。集合尚未初始化
【发布时间】:2017-10-26 10:31:41
【问题描述】:

我试图在 javascript 上制作简单的 sharepoint 应用程序。 我创建列表,命名为“test”并在其中添加一些记录。 启动我的应用程序后,我收到错误消息:“集合尚未初始化。尚未请求或未执行请求。可能需要明确请求”。 它在成功函数中提出。 这是代码:

'use strict';

var web;
var hostweburl;
var appweburl;
var collListItem;

function sharePointReady() {
    hostweburl =
        decodeURIComponent(
            getQueryStringParameter('SPHostUrl')
        );
    appweburl =
        decodeURIComponent(
            getQueryStringParameter('SPAppWebUrl')
        );

    var scriptbase = hostweburl + '/_layouts/15/';

    $.getScript(scriptbase + 'SP.js', function () {
        $.getScript(scriptbase + 'SP.Runtime.js', function () {
            $.getScript(scriptbase + 'SP.RequestExecutor.js', printAllListNamesFromHostWeb).fail(function () { alert("fail") });
        }).fail(function () { alert("fail") });
    }).fail(function () { alert("fail") });
    //ExecuteOrDelayUntilScriptLoaded(printAllListNamesFromHostWeb, "SP.js");
    //printAllListNamesFromHostWeb();
}

function getQueryStringParameter(param) {
    var params = document.URL.split("?")[1].split("&");
    var strParams = "";
    for (var i = 0; i < params.length; i = i + 1) {
        var singleParam = params[i].split("=");
        if (singleParam[0] == param) {
            return singleParam[1];
        }
    }
}

function printAllListNamesFromHostWeb() {
    var context;
    var factory;
    var appContextSite;

    context = new SP.ClientContext(appweburl);
    factory = new SP.ProxyWebRequestExecutorFactory(appweburl);
    context.set_webRequestExecutorFactory(factory);
    appContextSite = new SP.AppContextSite(context, hostweburl);

    web = appContextSite.get_web();
    var oList = web.get_lists().getByTitle("testList");
    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View><RowLimit>10</RowLimit></View>');
    collListItem = oList.getItems(camlQuery);
    context.load(collListItem, 'Include(Id, Title)');
    context.executeQueryAsync(
        //Function.createDelegate(this, success),
        //Function.createDelegate(this, errorHandler)
        success, errorHandler
    );
}
function success(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');
    }
    alert(listItemInfo.toString());
}
function errorHandler(sender, args) {
    alert('Fail: ' + args.get_message() + '\n' + args.get_stackTrace());
}
sharePointReady();

【问题讨论】:

    标签: javascript sharepoint


    【解决方案1】:

    var listItemEnumerator = collListItem.getEnumerator();

    成功函数中的上一行可能会导致此问题。

    您在printAllListNamesFromHostWeb 函数中声明了collListItem 变量。所以它在success 函数中将不可用/未定义。

    您需要做的是声明 collListItem 全局变量(即在您声明 appweburl,hostweburl,web 变量的 printAllListNamesFromHostWeb 函数之外)并且您的代码将正常工作。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多