我对这个错误或各种解决方案并不陌生,但这个让我摸不着头脑。我使用JavaScript对象模型来获取给定文件夹中所有文件的列表。我在下面的代码中得到了getEnumerator上的错误。我已经将代码精简到最低限度:
function getFilesInFolder() {
var folderServerRelativeUrl = folderPath + ID;
var context = new SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle(documentLibraryName);
var query = SP.CamlQuery.createAllItemsQuery();
query.set_folderServerRelativeUrl(folderServerRelativeUrl);
//Update "web part" link
$("#doclink").attr('href',folderServerRelativeUrl);
files = list.getItems(query)
context.load(files, 'Include(Id)');
context.executeQueryAsync(Function.createDelegate(this, this.OnSuccess), Function.createDelegate(this, this.OnFailure));
}
function OnSuccess()
{
//ERROR Next Line:
var listItemEnumerator = this.files.getEnumerator();
var table = $("#attachments");
while (listItemEnumerator.moveNext())
{
console.log("Found a file");
}
}在文件的开头调用代码:$(document).ready(function(){ //其他代码...ExecuteorDelayUntilScriptLoaded(getFilesInFolder,"sp.js");});
我已经尝试了大量的变化,它过去是有效的(不确定是什么改变了服务器或客户端)。
发布于 2016-03-16 14:38:40
我试过你的代码,因为我看不到任何明显的错误,而且它工作正常。我用瑞典语硬编码了folderServerRelativeUrl:"/sites/intranet/dokument“是我的根网站和"Documents”文件夹。
您可以在浏览器"sitecollection/_api/web/getFolderByServerRelativeUrl('/path/to/folder/')“中尝试查看您使用的url是否正确。
您还可以在onsuccess中设置断点,并查看控制台: files.get_count()以查看是否有任何结果。
你的负载很好,所以不用担心这个!
function getFilesInFolder() {
var folderServerRelativeUrl = "/sites/intranet/dokument";
var context = new SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle("Dokument");
var query = SP.CamlQuery.createAllItemsQuery();
query.set_folderServerRelativeUrl(folderServerRelativeUrl);
//Update "web part" link
// $("#doclink").attr('href',folderServerRelativeUrl);
files = list.getItems(query)
context.load(files, 'Include(Id)');
context.executeQueryAsync(Function.createDelegate(this, this.OnSuccess), Function.createDelegate(this, this.OnFailure));
}
function OnSuccess()
{
//ERROR Next Line:
var listItemEnumerator = this.files.getEnumerator();
var table = $("#attachments");
while (listItemEnumerator.moveNext())
{
console.log("Found a file");
}
}发布于 2016-03-16 17:37:07
这个错误基本上意味着一旦执行了迭代,就没有从服务器请求结果对象(this.files变量)。通过同时执行几个查询(基本上多次调用getFilesInFolder ),可以重现此错误。
考虑到结果对象(this.files)存储在全局作用域(窗口对象)中,我强烈建议您不要使用这种获取列表项的方法,相反,您可以考虑将结果存储在本地作用域中,如下所示:
function getFilesInFolder() {
var folderServerRelativeUrl = "/Documents/Archive";
var context = new SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle(documentLibraryName);
var query = SP.CamlQuery.createAllItemsQuery();
query.set_folderServerRelativeUrl(folderServerRelativeUrl);
var items = list.getItems(query)
context.load(items, 'Include(Id)');
context.executeQueryAsync(
function(){
if(items.get_count() > 0)
{
console.log('Found a file(s)');
}
},
function(sender,args){
console.log(args.get_message());
});
}使用这种方法,您可以很容易地避免重写产生的对象的冲突,从而获得此异常。
https://stackoverflow.com/questions/36018690
复制相似问题