我尝试在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();
答案 0 :(得分:0)
var listItemEnumerator = collListItem.getEnumerator();
上述成功功能可能导致此问题。
您已在collListItem
函数中声明了printAllListNamesFromHostWeb
变量。所以它在success
函数中不可用/将是未定义的。
您需要做的是声明collListItem
变量全局(即您已声明printAllListNamesFromHostWeb
变量的appweburl,hostweburl,web
函数之外)并且您的代码可以正常工作。