使用Javascript代码查找当前的SharePoint用户

时间:2014-07-21 07:43:20

标签: javascript sharepoint sharepoint-2010

HY

我需要从我的SharePoint中找到当前用户。 我尝试了很多东西:

  • SP.Utilities.PrincipalInfo.get_loginName()
  • _spPageContextInfo.userId
  • ...

在任何时候,我都有相同的结果Undefined =(

3 个答案:

答案 0 :(得分:4)

使用CSOM API检索当前用户对象时,请将代码包装在内部 SP.SOD.executeOrDelayUntilScriptLoaded method确保在加载 SharePoint JS库(sp.js)之后执行指定的代码:

SP.SOD.executeOrDelayUntilScriptLoaded(function(){
   //your code goes here..
}, 'sp.js');

如何使用CSOM API检索当前用户对象

function getCurrentUser(success,error)
{
    var ctx = SP.ClientContext.get_current();
    var web = ctx.get_web();
    var currentUser = web.get_currentUser();
    ctx.load(currentUser);
    ctx.executeQueryAsync(function(){
        success(currentUser);
    },
    error);
}

用法

SP.SOD.executeOrDelayUntilScriptLoaded(function(){
  getCurrentUser(
    function(currentUser){
      console.log(currentUser.get_loginName());
    },
    function(sender, args)
    {
      console.log('Request failed ' + args.get_message() + ':'+ args.get_stackTrace());
    }); 
}, 'sp.js');

答案 1 :(得分:0)

答案可能就在这里。我唯一改变的是获取LoginName而不是Title:

https://stackoverflow.com/a/21002895/1680288

var userid= _spPageContextInfo.userId;
var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")";
var requestHeaders = { "accept" : "application/json;odata=verbose" };
$.ajax({
    url : requestUri,
    contentType : "application/json;odata=verbose",
    headers : requestHeaders,
    success : onSuccess,
    error : onError
});

function onSuccess(data, request){
    var loginName = data.d.LoginName;
    alert(loginName);
}

function onError(error) {
    alert("error");
}

如果您未定义..可能您未经过身份验证或未在母版页中包含一些相关的javascript文件。

答案 2 :(得分:0)

没有jquery:

var userid= _spPageContextInfo.userId;
var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")";


function createXMLHttp() {
  //If XMLHttpRequest is available then using it
  if (typeof XMLHttpRequest !== undefined) {
    return new XMLHttpRequest;
  //if window.ActiveXObject is available than the user is using IE...so we have to create the newest version XMLHttp object
  } else if (window.ActiveXObject) {
    var ieXMLHttpVersions = ['MSXML2.XMLHttp.5.0', 'MSXML2.XMLHttp.4.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp', 'Microsoft.XMLHttp'],
        xmlHttp;
    //In this array we are starting from the first element (newest version) and trying to create it. If there is an
    //exception thrown we are handling it (and doing nothing ^^)
    for (var i = 0; i < ieXMLHttpVersions.length; i++) {
      try {
        xmlHttp = new ActiveXObject(ieXMLHttpVersions[i]);
        return xmlHttp;
      } catch (e) {
      }
    }
  }
}   

function getData() {
  var xmlHttp = createXMLHttp();
  xmlHttp.open('get', requestUri , true);
  xmlHttp.setRequestHeader("Content-Type", "application/json;odata=verbose");     
  xmlHttp.setRequestHeader("accept", "application/json;odata=verbose");   
  xmlHttp.send(null);
  xmlHttp.onreadystatechange = function() {
    if (xmlHttp.readyState === 4) {
      if (xmlHttp.status === 200) {
        var data = JSON.parse(xmlHttp.responseText);
        var loginName = data.d.LoginName;
        alert(loginName);

      } else {
      }
    } else {
      //still processing
    }
  };
}   

getData();