当前位置: 首页>>技术问答>>正文


使用javascript获取客户端对象模型中的当前用户?

webfans 技术问答 , , 去评论

问题描述

var ctx = new SP.ClientContext.get_current();
var web = ctx.get_web();
ctx.load(web);
var user = web.get_currentUser();
alert(user);

我使用上面的代码来使用JavaScript来获取当前用户,但是我收到了一个错误:

‘SP.ClientContext.get_current’ is null or not an object

我该怎么办?任何帮助赞赏。

最佳解决方法

我已经使用SharePoint的JavaScript对象模型来检索当前登录的用户名。一旦执行了load和executeQueryAsync方法并且对SharePoint的调用成功,那么在onQuerySucceeded方法内部我使用SP向浏览器显示用户名.Principal.get_loginName属性。试一试…您可以在SharePoint 2010中的内容编辑器Web部件中托管并运行下面的代码。

<script type="text/javascript">
ExecuteOrDelayUntilScriptLoaded(init,'sp.js');
var currentUser;
function init(){
    this.clientContext = new SP.ClientContext.get_current();
    this.oWeb = clientContext.get_web();
    currentUser = this.oWeb.get_currentUser();
    this.clientContext.load(currentUser);
    this.clientContext.executeQueryAsync(Function.createDelegate(this,this.onQuerySucceeded), Function.createDelegate(this,this.onQueryFailed));
}

function onQuerySucceeded() {
    document.getElementById('userLoginName').innerHTML = currentUser.get_loginName(); 
    document.getElementById('userId').innerHTML = currentUser.get_id();
    document.getElementById('userTitle').innerHTML = currentUser.get_title();
    document.getElementById('userEmail').innerHTML = currentUser.get_email();
}

function onQueryFailed(sender, args) {
    alert('Request failed. \nError: ' + args.get_message() + '\nStackTrace: ' + args.get_stackTrace());
}
</script>
<div>Current Logged User:
    <span id="userLoginName"></span>
    <span id="userId"></span>
    <span id="userTitle"></span>
    <span id="userEmail"></span>
</div>

或使用以下代码

function CallClientOM()
{
var context = new SP.ClientContext.get_current();
this.website = context.get_web();
this.currentUser = website.get_currentUser();
context.load(currentUser);
context.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}



function onQuerySucceeded(sender, args)
 {
 alert(currentUser.get_loginName());
 }



function onQueryFailed(sender, args)
{
alert('request failed ' + args.get_message() + '\n'+ args.get_stackTrace());
}

次佳解决方法

我通常在下面使用此功能。您可以根据使用方式对其进行修改。

function getUserInformation(){
   var context = new SP.ClientContext.get_current();
   var web = context.get_web();  
   var currentUser = web.get_currentUser();  
   currentUser.retrieve();
   context.load(web);
   context.executeQueryAsync(
      function(){ //On success function
        var userObject = web.get_currentUser();
        var email = userObject.get_email();
        var id = userObject.get_id();
        var loginName = userObject.get_loginName();
        console.log(userObject);

     },
     function(){ //On fail function
        alert('Error: ' + args.get_message() + '\n' + args.get_stackTrace());
     }
  );
}

第三种解决方法

我使用下面的JavaScript函数来获取当前登录用户的登录名。

在处理此代码时,注意到get_loginName()功能带来了i:0#.w|DomainName\asad。所以我使用字符串操作来获得所需的字符串,即DomainName\asad

function getCurrentUser() {
    try {
        var clientContext = new SP.ClientContext.get_current();
        var tempcurrentUser = clientContext.get_web().get_currentUser();
        clientContext.load(tempcurrentUser); 
        clientContext.executeQueryAsync(function() {

            //If you notice tempcurrentUser will contain 
            //something like this i:0#.w|DomainName\asad. 
            //But we would want only DomainName\asad, so we use string manipulation

            var index = tempcurrentUser.get_loginName().indexOf('|') + 1;
            var currentUser = tempcurrentUser.get_loginName().substring(index);

            // Here you will get the desired login name 
            // of current logged in user i.e. DomainName\asad
            alert(currentUser);

        }, Fail);
    } catch (err) {
        Fail();
    }
}

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

第四种方法

您可以使用登录用户名/ID

  • _spPageContextInfo.userId

  • _spPageContextInfo.userLoginName

希望它可以帮到某人。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2594.html,转载请务必附带本地址声明。