401错误后如何使jQuery AJAX函数继续

时间:2018-12-03 21:46:06

标签: jquery ajax rest sharepoint

我正尝试通过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中尝试过

1 个答案:

答案 0 :(得分:1)

已更新:

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

OLD:

也许您可以将逻辑更改为其他逻辑吗?

1。 获取您有权访问的所有组。 只需调用“ / _api / Web / SiteGroups”即可,无需任何其他参数。 SharePoint REST API必须使您仅对您的组可用。 从预定义列表中排除所有获得的组。 预定义列表中所有剩余的组就是您要查找的组,即“访问被拒绝”。

我了解此逻辑不考虑不存在的组。但是可能是您当前的逻辑还不考虑不存在的组。如果您无权访问群组,那么您将无法理解该群组是否存在。

2。 另外,如果您使用SharePoint内部部署,则可以创建Web服务。 Web服务将通过某个服务帐户下的特权提升所有组。 =) 您可以调用此Web服务方法。