首页 > 解决方案 > 401错误后如何使jQuery AJAX函数继续

问题描述

我正在尝试通过 REST API 遍历 SharePoint 组 ID 的数据集,并处理结果。问题是,我无法访问所有组(这是意料之中的)。在这种情况下,我想将组 ID 记录为“拒绝访问”并继续下一个。

当代码到达我无权访问的第一组时,系统会提示我输入凭据,正如预期的那样。无论我输入 cred 还是单击“取消”,我都会收到预期的 401 错误,脚本会以-

HTTP401: DENIED - The requested resource requires user authentication.
(XHR)GET - https://{sourceSharePointSite}/_api/Web/SiteGroups/GetById({groupID})/Users

所以,是的,我得到了我无权访问的第一个组的 ID,但是脚本刚刚退出,我真的需要检查其余的组(超过 400 个。不要问)

这是我的代码...

function getMultiGroupMembers(arrGroups){// arrGroups is an object defined earlier
  $(arrGroups).each(function(i){
    var myId = arrGroups.results[i].Id;
    var myTitle = arrGroups.results[i].Title;
    log("Group ID: "+myId+" Group Name: "+myTitle+ " Members:"); 
    getData(myId).then(function() {
      log( "getMultiGroupMembers success" );
    }, function() {
      log( "getMultiGroupMembers fail" );
    })  
  });  
}

function getData(groupId) {
  var url = myUrl + "/_api/Web/SiteGroups/GetById("+groupId+")/Users";
  return $.getJSON(url).then(function(data){
    log("getGroupMembers() success: " + data);
    arrUsers = jsonToCsv(data.d); // convert the JSON object to CSV for exporting
    log(JSON.stringify(arrUsers)); // display the results in the log
  }, function(err) {
    var dfd = $.Deferred();
    dfd.reject(err)
    return dfd.promise();
  })
}

真的不确定我错过了什么。我在 MS Edge 和 Chrome 中尝试过

标签: jqueryajaxrestsharepoint

解决方案


更新:

使用此端点: _api/web/currentuser/groups 。它将显示用户有权访问的所有组。使用 /_api/Web/SiteGroups 获取所有组。过滤第二个,你会得到你想要的。

老的:

也许您可以将逻辑更改为另一个?

1. 获取您有权访问的所有组。只需调用“/_api/Web/SiteGroups”,无需任何附加参数。SharePoint REST API 必须返回您仅对您的组可用。从您的预定义列表中排除所有获得的组。预定义列表中的所有剩余组都是您想要找到的,即“拒绝访问”。

我知道这个逻辑不考虑不存在的组。但可能是您当前的逻辑还没有考虑不存在的组。如果您无权访问组,那么您将无法了解它是否存在。

2. 此外,如果您使用 SharePoint On-premise 那么您可以创建 Web 服务。Web 服务将在某个服务帐户下通过提升的权限获取所有组。=) 你可以调用这个网络服务方法。


推荐阅读