SharePoint中。该集合尚未初始化

时间:2017-10-26 10:31:41

标签: javascript sharepoint

我尝试在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();

1 个答案:

答案 0 :(得分:0)

var listItemEnumerator = collListItem.getEnumerator();

上述成功功能可能导致此问题。

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

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