当前用户以不正确的格式返回 - 母版页 - SharePoint 2013

时间:2014-08-12 15:12:56

标签: sharepoint-2013 sharepoint-online

我在这里遇到一点麻烦。我需要返回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

提前致谢!

3 个答案:

答案 0 :(得分:0)

尝试使用currentUser.get_title()代替currentUser.get_loginName();

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

当然它可能会有点误导,因为span有id&#39; userLoginName&#39;并且您正在显示用户标题。也许您应该考虑将范围的ID更改为&#39; userTitle&#39;。我可以看到你有另一个带有这个id的跨度,你实际上将它设置为currentUser.get_title()。因此,交换userLoginName span和userTitle span的位置可能是个好主意。

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

答案 1 :(得分: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');

REST

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);     
  });

答案 2 :(得分: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(我在网上发现了这个解决方案并对其进行修改)但是我正在分享这个解决方案,所以如果我们将来遇到麻烦,我们可以参考这个。

谢谢!