gpt4 book ai didi

javascript - 如何在 JavaScript 中跨多个函数使用全局变量?

转载 作者:行者123 更新时间:2023-12-02 14:48:49 25 4
gpt4 key购买 nike

我有一段代码,旨在检查用户的权限级别和组成员身份,并在用户具有访问网站该部分的正确权限时启动一个对话框。

function bindSettingsButton() {
$("#mt-ngw-personalsettings").on("click", function() {
RequestNewSite();
});
}

function RequestNewSite() {
var HasPermission = false;
var isGroupMember = false;
CheckCurrentUserMembership();
CheckUserHasEditPermissions();
CheckUserPermissions();
}

function CheckCurrentUserMembership() {
var clientContext = new SP.ClientContext.get_current();
this.currentUser = clientContext.get_web().get_currentUser();
clientContext.load(this.currentUser);

this.userGroups = this.currentUser.get_groups();
clientContext.load(this.userGroups);
clientContext.executeQueryAsync(OnQuerySucceeded, OnQueryFailed);
}

function OnQuerySucceeded() {
var isMember = false;
var groupsEnumerator = userGroups.getEnumerator();
while (groupsEnumerator.moveNext()) {
var group = groupsEnumerator.get_current();
if(group.get_title() == "Create Site OptOut") {
isMember = true;
this.isGroupMember = true;
break;
}
}
}

function OnQueryFailed()
{
alert("Couldn't check user group membership. Please contact to resolve this issue.");
}

function CheckUserHasEditPermissions() {
context = new SP.ClientContext.get_current();
web = context.get_web();
this._currentUser = web.get_currentUser();
this._theList = web.get_lists().getByTitle('siterequests');
context.load(this._currentUser);
context.load(this._theList, 'EffectiveBasePermissions')
context.executeQueryAsync(Function.createDelegate(this, this.onPermissionsSuccessMethod), Function.createDelegate(this, this.onPermissionsFailureMethod));
}

function onPermissionsSuccessMethod(sender, args) {
if (this._theList.get_effectiveBasePermissions().has(SP.PermissionKind.editListItems))
{
this.HasPermission = true;
}
else
{
this.HasPermission = false;
}
}

function onPermissionsFailureMethod()
{
alert("Couldn't check permissions. Please contact to resolve this issue.");
}

function CheckUserPermissions() {
if(this.isGroupMember == true)
{
alert("You do not have permission to create sites. If you believe you should have access to this functionality, please contact .");
}
else if(this.HasPermission == false)
{
alert("You do not have permission to create sites. If you believe you should have access to this functionality, please contact .");
}
else
{
showDialogue();
document.getElementById("next-stage").focus();
}
}

不幸的是,当到达本节末尾时,变量 HasPermission 和 isGroupMember 仍未定义,因此对话会自动为每个用户启动。我有一种感觉,我误用了 .this 关键字,这是一个范围错误,但我在 JS 方面不够专业,无法确定或能够修复它。谁能准确地告诉我我做错了什么以及如何解决它?

最佳答案

您正在执行异步函数,这意味着即使您首先开始的内容尚未完成,其余代码仍将继续执行。在 onPermissionsSuccessMethodOnQuerySucceeded 函数完成后,您必须调用 CheckUserPermissions

除此之外,HasPermissionisGroupMember 变量是 RequestNewSite 函数的本地变量,这意味着它们超出了 CheckUserPermissions 的范围> 功能。

    var HasPermission = false;
var isGroupMember = false;
var CompletedCallbacks = 0;
function bindSettingsButton() {
$("#mt-ngw-personalsettings").on("click", function() {
RequestNewSite();
});
}

function RequestNewSite() {
CheckCurrentUserMembership();
CheckUserHasEditPermissions();
}

function CheckCurrentUserMembership() {
var clientContext = new SP.ClientContext.get_current();
this.currentUser = clientContext.get_web().get_currentUser();
clientContext.load(this.currentUser);

this.userGroups = this.currentUser.get_groups();
clientContext.load(this.userGroups);
clientContext.executeQueryAsync(OnQuerySucceeded, OnQueryFailed);
}

function OnQuerySucceeded() {
var isMember = false;
var groupsEnumerator = userGroups.getEnumerator();
while (groupsEnumerator.moveNext()) {
var group = groupsEnumerator.get_current();
if(group.get_title() == "Create Site OptOut") {
isMember = true;
isGroupMember = true;
break;
}
}
CompletedCallbacks++;
CheckUserPermissions();
}

function OnQueryFailed()
{
alert("Couldn't check user group membership. Please contact SPCOE@capita.co.uk to resolve this issue.");
}

function CheckUserHasEditPermissions() {
context = new SP.ClientContext.get_current();
web = context.get_web();
this._currentUser = web.get_currentUser();
this._theList = web.get_lists().getByTitle('siterequests');
context.load(this._currentUser);
context.load(this._theList, 'EffectiveBasePermissions')
context.executeQueryAsync(Function.createDelegate(this, this.onPermissionsSuccessMethod), Function.createDelegate(this, this.onPermissionsFailureMethod));
}

function onPermissionsSuccessMethod(sender, args) {
if (this._theList.get_effectiveBasePermissions().has(SP.PermissionKind.editListItems))
{
HasPermission = true;
}
else
{
HasPermission = false;
}
CompletedCallbacks++;
CheckUserPermissions();
}

function onPermissionsFailureMethod()
{
alert("Couldn't check permissions. Please contact SPCOE@capita.co.uk to resolve this issue.");
}

function CheckUserPermissions() {
if(CompletedCallbacks != 2) return;
if(isGroupMember == true)
{
alert("You do not have permission to create sites. If you believe you should have access to this functionality, please contact SPOCOE@capita.co.uk.");
}
else if(HasPermission == false)
{
alert("You do not have permission to create sites. If you believe you should have access to this functionality, please contact SPOCOE@capita.co.uk.");
}
else
{
showDialogue();
document.getElementById("next-stage").focus();
}
}

这段代码应该可以工作。

关于javascript - 如何在 JavaScript 中跨多个函数使用全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36356677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com