喂,
我想做一些我认为相当简单的事情:
使用带有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',为什么'属性或字段'未初始化?
答案 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