gpt4 book ai didi

javascript - getEnumerator 失败并出现集合未初始化错误

转载 作者:行者123 更新时间:2023-11-28 07:54:37 26 4
gpt4 key购买 nike

我正在使用 JSOM 查找特定列表中特定项目的特定字段中的值。总的来说,代码查找用户的组成员身份(使用 SPServices),然后使用该值来匹配列表中的项目(列表包含填充有组名称的“Title”字段和包含另一个字符串的“Portal”字段)并尝试从该列表项中提取不同的值。我收到的错误位于“var listItemEnumerator = this.listItems.getEnumerator();”行。错误是“集合尚未初始化。尚未请求或请求尚未执行。可能需要显式请求。”

这是代码:

function getPortalURL(userGroup) {
var URL = "";

var ctx = new SP.ClientContext.get_current();
var list = ctx.get_web().get_lists().getByTitle('Clients');

var query = "<View><Query><Where><Eq><FieldRef Name='Title'><Value Type='Text'>" + userGroup + "</Value></Eq></Where></Query></View>";
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml(query);

this.listItems = list.getItems(camlQuery);
ctx.load(this.listItems);
ctx.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded(URL)), Function.createDelegate(this, this.onQueryFailed));

return URL;
}
function onQuerySucceeded(URL) {
var listItemEnumerator = this.listItems.getEnumerator();

while (listItemEnumerator.moveNext()) {
var currentItem = listItemEnumerator.get_current();

URL = currentItem.get_item('Portal');
}
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

编辑:我已经更新了我的代码以反射(reflect)下面的更改,但现在我看到查询每次尝试都失败,总是路由到失败函数。这是代码,以防我在实现中做错了什么:

function getPortalURL(userGroup) {
var query = "<View><Query><Where><Eq><FieldRef Name='Title'><Value Type='Text'>" + userGroup + "</Value></Eq></Where></Query></View>";

getListItems('Clients', query,
function(items) {
if(items.get_count() === 1) {
var item = items.getItemAtIndex(0);
alert(item.get_item('Portal'));
}
},
function(sender,args){
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
);
}

function getListItems(listTitle, queryText, success, error) {
var ctx = SP.ClientContext.get_current();
var web = ctx.get_web();
var list = web.get_lists().getByTitle(listTitle);
var query = new SP.CamlQuery();
query.set_viewXml(queryText);
var items = list.getItems(query);
ctx.load(items);
ctx.executeQueryAsync(
function() {
success(items);
},
error
);
}

最佳答案

一些更正(错误发生可能是由于第三项):

  • var ctx = SP.ClientContext.get_current();//因为不需要新的构造函数
  • 必须删除 return 语句,因为SP.ClientContext.executeQueryAsync异步方法
  • 替换 ctx.executeQueryAsync(Function.createDelegate(this,
    this.onQuerySucceeded(URL)), Function.createDelegate(this,
    this.onQueryFailed));
    ctx.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed)); 自 SP.ClientContext 以来。 executeQueryAsync 接受回调函数
<小时/>

我建议改用以下常见方法。它允许通过指定列表标题CAML查询来加载列表项:

function getListItems(listTitle,queryText, success,error){
var ctx = SP.ClientContext.get_current();
var web = ctx.get_web();
var list = web.get_lists().getByTitle(listTitle);
var query = new SP.CamlQuery();
query.set_viewXml(queryText);
var items = list.getItems(query);
ctx.load(items);
ctx.executeQueryAsync(
function() {
success(items);
},
error
);
}

使用

从页面列表加载列表项并打印第一个:

getListItems('Pages','<View><Query/></View>',
function(items){
if(items.get_count() > 0) {
var firstItem = items.getItemAtIndex(0);
console.log(firstItem.get_item('Title'));
}
},
function(sender,args){
console.log(args.get_message());
}
);

在您的情况下,由于必须找到特定项目,因此可以使用以下示例:

getListItems('<List Title>','<Your query goes here>',
function(items){
if(items.get_count() === 1) { //Is item found?
var item = items.getItemAtIndex(0);
console.log(item.get_item('<Field Name>'));
}
},
function(sender,args){
console.log(args.get_message());
}
);

更新

查询中存在拼写错误,修正查询:

<View><Query><Where><Eq><FieldRef Name='Title'/><Value Type='Text'>" + userGroup + "</Value></Eq></Where></Query></View>

关于javascript - getEnumerator 失败并出现集合未初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26261909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com