0

我这里有点麻烦。我需要在 SharePoint 中返回当前登录的用户。我期待类似的东西James Ward,而不是i:0#.f|membership|jamesw@gmail.com

到目前为止,这是我在母版页中使用的代码。

<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>

我使用这行代码在我的母版页上显示返回值:

<span>Welcome to My Page,<span id="userLoginName"></span></span>

不幸的是,userLoginName返回这个:i:0#.f|membership|jamesw@gmail.com

我怎样才能返回James Ward而不是i:0#.f|membership|jamesw@gmail.com

提前致谢!

4

3 回答 3

0

使用SP.User.get_title()属性检索用户名,例如:

var userName = user.get_title();

如何通过 CSOM/REST 在 SharePoint 2013 中检索当前用户

CSOM

function getCurrentUser(success, failure) {
   var ctx = SP.ClientContext.get_current(); 
   var user = ctx.get_web().get_currentUser();
   ctx.load(user); 

   ctx.executeQueryAsync(
      function () {
         success(user);
      }, 
      failure
   );
}

用法

ExecuteOrDelayUntilScriptLoaded(function(){
  getCurrentUser(
    function(user){
     document.getElementById('userLoginName').innerHTML = user.get_title();
    },
    function(sender,args){
     console.log(args.get_message());     
    });
},'sp.js');

休息

function getCurrentUser(success, failure) {
    $.ajax({
        url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/currentUser",
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            success(data.d);
        },
        error: function (data) {
            failure(data);
        }
    });
}

用法

getCurrentUser(
  function(user){
     document.getElementById('userLoginName').innerHTML = user.Title;
  },
  function(error){
     console.log(error.responseText);     
  });
于 2014-08-12T16:32:29.813 回答
0

在尝试了一些替代方案后,我提出了这个解决方案:

<script src="../../Style%20Library/MyJsFolder/jquery-1.7.2.min.js"></script>
< script type = "text/javascript" >
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 Logg = data.d;
document.getElementById('userLoginName').innerHTML = Logg.Title;
}

function onError(error) {
alert("error");
} < /script>

我们可以像这样返回显示名称:

<span id="userLoginName"></span>

我不擅长 js 或 sharepoint(我在网上找到了这个解决方案并对其进行了修改),但我正在分享这个解决方案,所以如果我们将来遇到问题,我们可以参考这个。

谢谢!

于 2014-08-13T03:44:04.920 回答
0

尝试使用currentUser.get_title()而不是currentUser.get_loginName();.

document.getElementById('userLoginName').innerHTML = currentUser.get_title(); 

当然这可能有点误导,因为 span 的 id 为 'userLoginName' 并且您正在显示用户标题。也许您应该考虑将跨度的 id 更改为“userTitle”。我可以看到您有另一个具有此 ID 的跨度,并且您实际上将其设置为 currentUser.get_title()。所以也许用userLoginNamespan 和userTitlespan 交换位置是个好主意。

<span>Welcome to My Page,<span id="userTitle"></span></span>
于 2014-08-12T16:30:16.780 回答