0

我能够在 SharePoint SitePage 中获取当前登录用户的全名。但是,我需要在它之后使用全名并对其进行处理。不幸的是,它没有按预期工作。

这是代码

<script type="text/javascript">
    var currentUser = "";
    $(document).ready(function() { 
        AddItem();
        alert(currentUser);
    });

    function AddItem()
    {
        var context = new SP.ClientContext.get_current();
        var web = context.get_web();
        user = context.get_web().get_currentUser();

        context.load(this.user);
        context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod),
        Function.createDelegate(this, this.onFailureMethod));
    }
    function onSuccessMethod(sender, args) {
        currentUser = this.user.get_title();
        //alert(' Name:' + this.user.get_title() + '\n Login:' + this.user.get_loginName());
    }
    function onFaiureMethod(sender, args) {
        //alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
    }
</script>

现在我在想,因为我在 AddItem() 之后调用 alert(currentUser),所以我会得到当前登录用户的名称,但事实并非如此,因为它给了我空字符串。基本上 alert(currentUser) 在 AddItem() 之前被调用。

任何想法/建议将不胜感激。

4

1 回答 1

0

我不知道共享点是什么(我似乎记得一些古老的微软平台),但我确实认为我可以告诉你问题出在哪里。

AddItem 执行异步操作,这意味着它最初不会执行很多操作,并且在 AddItem 函数触发之前触发了警报获取。因此,您可能想要的是以下内容:

var currentUser = "";
$(document).ready(function() { 
    AddItem(function(){
        alert(currentUser);
    });
});

function AddItem(callback)
{
    var context = new SP.ClientContext.get_current();
    var web = context.get_web();
    user = context.get_web().get_currentUser();

    context.load(this.user);
    context.executeQueryAsync(Function.createDelegate(this, function(sender, args) {
         currentUser = this.user.get_title();
         callback();
         //alert(' Name:' + this.user.get_title() + '\n Login:' + this.user.get_loginName());
    }),Function.createDelegate(this, this.onFailureMethod));
}
function onFaiureMethod(sender, args) {
    //alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
}
于 2012-07-06T17:44:20.847 回答