方法中的javascript变量在方法外部使用
这是我的密码:方法中的javascript变量在方法外部使用,javascript,Javascript,这是我的密码: var count = 0; function retrieveCurrentListProperties() { clientContext = new SP.ClientContext.get_current(); web = clientContext.get_web(); var list = web.get_lists().getByTitle("Urgent Alerts"); var camlQuery = new SP.CamlQ
var count = 0;
function retrieveCurrentListProperties() {
clientContext = new SP.ClientContext.get_current();
web = clientContext.get_web();
var list = web.get_lists().getByTitle("Urgent Alerts");
var camlQuery = new SP.CamlQuery();
var q = "<View><Query><Where><Eq><FieldRef Name='End_x0020_Date'/><Value Type='DateTime'><Today/></Value></Eq></Where></Query></View>";
camlQuery.set_viewXml(q);
this.listItems = list.getItems(camlQuery);
clientContext.load(this.listItems);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onCListItemsLoadSuccess),
Function.createDelegate(this, this.onQueryFailed));
}
function onCListItemsLoadSuccess(sender, args) {
var count1 = 0;
var listEnumerator = this.listItems.getEnumerator();
//iterate though all of the items
count1 = this.listItems.get_count();
}
function onQueryFailed(sender, args) {
alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
}
count = 1;
var计数=0;
函数retrieveCurrentListProperties(){
clientContext=new SP.clientContext.get_current();
web=clientContext.get_web();
var list=web.get_list().getByTitle(“紧急警报”);
var camlQuery=new SP.camlQuery();
var q=“”;
camlQuery.set_viewXml(q);
this.listItems=list.getItems(camlQuery);
load(this.listItems);
clientContext.executeQueryAsync(Function.createDelegate(this,this.onCListItemsLoadSuccess),
Function.createDelegate(this,this.onQueryFailed));
}
函数onCListItemsLoadSuccess(发送方,参数){
var count1=0;
var listEnumerator=this.listItems.getEnumerator();
//迭代所有项目
count1=this.listItems.get_count();
}
函数onQueryFailed(发送方,参数){
警报('请求失败'+args.get_message()+'\n'+args.get_stackTrace());
}
计数=1;
此代码从sharepoint检索列表,然后统计该列表中的项目数。我需要将
count1
用于count=1
的另一个部分,但如果我这样做,显然会抛出一个错误。
如何以我想要的方式使用count1因为在服务器上异步执行当前挂起的请求,所以通常使用两种方法来控制SharePoint中异步调用的顺序执行
- 回调
- 推迟
function getData(Success,Error) {
//...
clientContext.executeQueryAsync(function() {
var result = ...
Success(result);
},
Error
);
}
延迟方法基于承诺模式,请参阅CSOM使用承诺的详细信息
使用回调方法的示例
建议
避免全局变量
将代码包装在作用域函数中,使用该作用域函数的局部变量,并使其他函数在其中闭包
(function() { // Begin scoping function
var clientContext; // Global to your code, invisible outside the scoping function
function loadListItems(listTitle) {
// ...
}
})();
函数的用法。createDelegate
在大多数情况下,不需要使用Function.createDelegate
包装处理程序,而是可以编写:
ctx.executeQueryAsync(succeeded,failed);
或
“但很明显,如果我做了
count=count1
,它会抛出一个错误”-为什么?count
和count1
都是这个.listItems.get\u count()
。全局声明并正确初始化。使用在中分配给它们的方法之外的变量很容易。在变量被赋值之前使用它们是很棘手的。你在哪里做count=count1?这只是因为范围界定
ctx.executeQueryAsync(succeeded,failed);
ctx.executeQueryAsync(function(){
//...
},
function(sender,args){
//Error handling goes here
}
);