SharePoint 2013:我只有在使用客户端对象模型REST API执行我的方法时才需要调用我的方法。见下面的例子:
<script type="text/javascript">
function getListData() {
context = new SP.ClientContext.get_current();
web = context.get_web();
var list = web.get_lists().getByTitle('myList');
var myquery = new SP.CamlQuery();
myquery.set_viewXml("<View><Query><Where><IsNotNull><FieldRef Name='Title' />" +
"</IsNotNull></Where></Query></View>");
myItems = list.getItems(myquery);
context.load(myItems);
context.executeQueryAsync(Function.createDelegate(this, function () { getListDataSuccess(); }), Function.createDelegate(this, this.getListDataFailed));
}
$(document).ready(function () {
getListData();
// I need to call my method here.
//Once getListDataSuccess method is completed then only I need to call some other function based on the result of getListDataSuccess method.
});
</script>
我可以在getListDataSuccess中调用我的方法,但这不是这里的情况。排队的其他几种方法一个接一个地使用客户端对象模型REST API。因此只剩下回调选项。 JQuery和SPServices中提供了类似的回调功能。但不确定它如何与SharePoint客户端对象模型一起使用?
答案 0 :(得分:3)
由于JSOM是异步,因此通常使用两种方法来控制SharePoint中异步调用的顺序执行:
使用回调方法,您可以像这样声明您的函数
function getListData(listTitle,success,error)
{
var context = SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle(listTitle);
var items = list.getItems(SP.CamlQuery.createAllItemsQuery());
context.load(items);
context.executeQueryAsync(
function() {
success(items);
},
error
);
}
用法
getListData('Documents',
function(items){
console.log('Items count: ' + items.get_count());
},
function(sender,args){
console.log('An error occured while retrieving list items:' + args.get_message());
});
延迟方法基于Promises模式,请参阅this article以获取有关使用CSOM的Promises的使用的详细信息
延迟 - 是一种立即从中返回对象的模式 异步调用
function getListData(listTitle,success,error)
{
var dfd = $.Deferred(function () {
var context = SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle(listTitle);
var items = list.getItems(SP.CamlQuery.createAllItemsQuery());
context.load(items);
context.executeQueryAsync(
function() {
dfd.resolve(items);
},
function (sender, args) {
dfd.reject(args);
}
);
});
return dfd.promise();
}
用法
getListData('Documents').then(function(items){
console.log('Items count: ' + items.get_count());
});