Javascript CSOM异步问题 [英] Javascript CSOM asynchronous issue
问题描述
大家好,
美好的一天!
我正在尝试使用CSOM javascript获取3个子站点的信息.
每个子网站都有一个列表,称为具有相同字段的互动".
我正在尝试从每个列表中获取一条最近修改的记录,并以表格的形式显示在顶级站点上.
由于JavaScript的异步特性,以下代码始终仅显示最后一个子站点列表信息
我在此处提供了代码,请建议对以下代码进行必要的更改
-------------------------------------------------- -------------------------------------------------- --------------
< script src =" https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"</script>
< input type ='button'id ='id1'value ='click'onClick =" GetListItem();" />
< style>
桌子,th,td {
边框:1像素纯黑色;
}
th,td {
内边距:5px;
text-align:向左;
}
</style>
< table id ="mytab" border ="1">
< tr>
</tr>
</table>
< script type ="文本/javascript">
var context;
var web;
var list;
var查询;
var个项目;
函数GetListItem()
{
var suburl = ["https://chaituslove.sharepoint.com/sites/WorkflowTest/sri/","https://chaituslove.sharepoint .com/sites/WorkflowTest/chaitu/," https://chaituslove.sharepoint.com/sites/WorkflowTest/krish/];
var i;
$(#mytab").append("
for(i = 0; i< suburl.length; i ++)
{
context = new SP.ClientContext(suburl [i]);
web = context.get_web();
list = web.get_lists().getByTitle("engagement");
query = new SP.CamlQuery();
query.set_viewXml('< View>< Query>< OrderBy>< FieldRef Name ="Modified" Ascending ="FALSE"/> ;</OrderBy></Query>< RowLimit> 1</RowLimit></View>');
items = list.getItems(query);
context.load(items);
context.executeQueryAsync(onGetListNameSuccess,onGetListNameFail);
}
}
函数onGetListNameSuccess(sender,args)
{
var listEnumerator = items.getEnumerator();
while(listEnumerator.moveNext())
{
console.log(listEnumerator.get_current().get_item('Title'));
//警报(listEnumerator.get_current().get_item('Title'));
var t = listEnumerator.get_current().get_item('Title');
var u = listEnumerator.get_current().get_item('date');
var v = listEnumerator.get_current().get_item('city');
$(#mytab").append('< tr>< td>'+ t +'</td>< td> ;'+ u +'</td>< td>'+ v +'</td</tr>');
}
}
函数onGetListNameFail(sender,args){
alert('无法获取列表项.错误:'+ args.get_message());
}
</script>
-------------------------------------------------- -------------------------------------------------- --------------
问候,
柴坦亚.
您可以尝试下面共享的脚本线程,它与您的要求类似.只需通过您的自定义查询更新查询即可.
var spCamlQuery = new SP.CamlQuery(); spCamlQuery.set_viewXml('< View>< Query>< OrderBy>< FieldRef Name ="Modified" Ascending ="FALSE"//</OrderBy<</Query>< RowLimit> 1 ;/RowLimit></View>');
>
</tr>
</table>
<script type="text/javascript">
var context;
var web;
var list;
var query;
var items;
function GetListItem()
{
var suburl=["https://chaituslove.sharepoint.com/sites/WorkflowTest/sri/","https://chaituslove.sharepoint.com/sites/WorkflowTest/chaitu/","https://chaituslove.sharepoint.com/sites/WorkflowTest/krish/"];
var i;
$("#mytab").append("<tr><th>Title</th><th>date</th><th>city</th></tr>");
for(i=0;i<suburl.length;i++)
{
context = new SP.ClientContext(suburl[i]);
web= context.get_web();
list = web.get_lists().getByTitle("engagement");
query = new SP.CamlQuery();
query.set_viewXml('<View><Query><OrderBy><FieldRef Name="Modified" Ascending="FALSE"/></OrderBy></Query><RowLimit>1</RowLimit></View>');
items = list.getItems(query);
context.load(items);
context.executeQueryAsync(onGetListNameSuccess, onGetListNameFail);
}
}
function onGetListNameSuccess(sender, args)
{
var listEnumerator = items.getEnumerator();
while(listEnumerator.moveNext())
{
console.log(listEnumerator.get_current().get_item('Title'));
//alert(listEnumerator.get_current().get_item('Title'));
var t=listEnumerator.get_current().get_item('Title');
var u=listEnumerator.get_current().get_item('date');
var v=listEnumerator.get_current().get_item('city');
$("#mytab").append('<tr><td>'+t+'</td><td>'+u+'</td><td>'+v+'</td></tr>');
}
}
function onGetListNameFail(sender, args) {
alert('Failed to get list items. Error:' + args.get_message());
}
</script>
------------------------------------------------------------------------------------------------------------------
Regards,
Chaitanya.
解决方案Hi,
You could try the script I shared in below thread, it’s similar requirement as you. Just update the query by your custom query.
var spCamlQuery = new SP.CamlQuery(); spCamlQuery.set_viewXml('<View><Query><OrderBy><FieldRef Name="Modified" Ascending="FALSE"/></OrderBy></Query><RowLimit>1</RowLimit></View>');
Best Regards,
Lee
这篇关于Javascript CSOM异步问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!