[英]JavaScript not Assigning to Global Variable
我有以下代码,它将返回当前登录的SharePoint用户的登录名:
var currentUser;
var currentUserName;
ExecuteOrDelayUntilScriptLoaded(MainMethod,'sp.js');
function MainMethod() {
GetName();
alert("MAIN " + currentUserName);
}
function GetName(){
this.clientContext = new SP.ClientContext.get_current();
this.oWeb = clientContext.get_web();
currentUser = this.oWeb.get_currentUser();
this.clientContext.load(currentUser);
this.clientContext.executeQueryAsync(Function.createDelegate(this,this.onQuerySucceeded), Function.createDelegate(this,this.onQueryFailed));
}
function onQuerySucceeded() {
currentUserName= currentUser.get_loginName().split("\\")[1];
alert("GetName " + currentUserName);
}
function onQueryFailed(sender, args) {
alert('Failed to retrieve user name');
}
运行代码时,我收到以下两个警报消息框:
"GetName" firstname.lastname
"MAIN" undefined
这行应该不是currentUserName= currentUser.get_loginName().split("\\\\")[1];
将firstname.lastname
值分配给全局currentUserName
变量?
您可以使用window.currentUserName = currentUser.get_loginName().split("\\\\")[1]
来确保访问全局属性。
为了避免用许多变量污染全局名称空间,可以将它们分组在这样的对象中:
window.user = {
currentUserName,
currentUser
}
然后,您可以通过window.user.currentUserName
访问它。
使用alert("MAIN " + currentUserName);
在success()
函数中。 它会获取更改后的值,但不会在MainMethod()
因为jsom是异步执行的。
GetName()
函数 alert("MAIN " + currentUserName);
onQuerySucceeded()
这就是为什么对MAIN不确定的原因,因为MAIN在success()
之前执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.