获取SharePoint2010客户端OM/ECMAScript中的当前用户

use*_*531 1 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();
Run Code Online (Sandbox Code Playgroud)

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

Ana*_*nov 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
    });
}
Run Code Online (Sandbox Code Playgroud)


Den*_*s G 5

您需要先检索用户并加载Web,而不是用户.

以下应该有效:

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();
Run Code Online (Sandbox Code Playgroud)

有关使用异步查询的更好示例,请查看以下教程: SharePoint 2010 ECMAScript - 如何知道登录的用户信息

  • 你对例外的看法是对的。用户仅在调用executeQueryAsync后才可用,请尝试教程中的示例 (2认同)