繁体   English   中英

JavaScript未分配给全局变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM