在SharePoint 2010客户端OM / ECMAScript中获取当前用户

时间:2010-11-24 09:52:01

标签: javascript sharepoint-2010

喂,

我想做一些我认为相当简单的事情:
使用带有ECMAScript的SharePoint2010客户端OM获取当前用户的loginName 这是我的代码:

        var currentcontext = new SP.ClientContext.get_current();
    var currentweb = currentcontext.get_web();
    currentcontext.load(currentweb);
    var currentuser = currentweb.get_currentUser();
    currentcontext.load(currentuser);
    var loginName = currentuser.get_loginName();

最后一行抛出异常: “该属性或字段尚未初始化。尚未请求或请求尚未执行。可能需要明确请求。”
但为什么?我已加载'currentuser',为什么'属性或字段'未初始化?

2 个答案:

答案 0 :(得分:6)

以下是executeQueryAsync的更完整示例:

SP.SOD.executeOrDelayUntilScriptLoaded(runMyCode, "SP.js");
function runMyCode() {
    var ctx = new SP.ClientContext.get_current();
    var web = ctx.get_web();
    ctx.load(web);
    var user = web.get_currentUser();
    user.retrieve();
    ctx.executeQueryAsync(
        function () {
                    //only in the success case you can work with user login
            doSomethingWithUserLogin(user.get_loginName());
        }, 
        function (data) {
            //notify the failure
    });
}

答案 1 :(得分:5)

您需要先检索用户并加载网络,而不是用户。

以下内容应该有效:

var currentcontext = new SP.ClientContext.get_current();
var currentweb = currentcontext.get_web();
currentcontext.load(currentweb);
var currentuser = currentweb.get_currentUser();
currentuser.retrieve();
currentcontext.load(currentweb);
var loginName = currentuser.get_loginName();

有关使用异步查询的更好示例,请查看以下教程: SharePoint 2010 ECMAScript - How to know logged in user information