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',那么为什么"属性或字段"未初始化?
以下是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)
您需要先检索用户并加载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 - 如何知道登录的用户信息