我有以下代码,它将返回当前登录的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');
}
当我运行代码时,我会收到以下2个警告消息框:
"GetName" firstname.lastname
"MAIN" undefined
行currentUserName= currentUser.get_loginName().split("\\")[1];
不应该将firstname.lastname
值分配给全局currentUserName
变量吗?
答案 0 :(得分:2)
您可以使用window.currentUserName = currentUser.get_loginName().split("\\")[1]
确保您正在访问全局属性。
为避免使用许多变量污染全局命名空间,您可以将它们分组到如下对象中:
window.user = {
currentUserName,
currentUser
}
然后您可以window.user.currentUserName
访问它。
答案 1 :(得分:2)
在alert("MAIN " + currentUserName);
功能中使用success()
。它将获得更改的值,但不会在MainMethod()
中,因为jsom执行异步。
GetName()
功能alert("MAIN " + currentUserName);
onQuerySucceeded()
这就是为什么你没有为MAIN定义因为MAIN在success()
之前执行。