请求,我想根据用户是否是管理员来更改第二个 AJAX 的 URL。如果用户不是管理员,则会在 AJAX 调用中使用不同的 URL。我收到一个错误,说URL:abcUrl未定义。我知道我可能会因为问这样的问题而投票,但我真的需要更新第二个 ajax URL,这对我来说将是一次学习经历,因为我是新的 AJAX。任何帮助都非常感谢。
var url;
$.ajax( {
url: sharepointBaseUrl + "_api/web/currentUser/groups?$select=title",
method: "GET",
headers: { "Accept": "application/json; odata=verbose" },
success: function (data) {
var items = data.d.results;
for (var i = 0, len = items.length; i < len; i++) {
if (items[i].Title == adminGroupName) {
self.currentUserIsAdmin(true);
abcUrl="Some Url1";
}
else{
abcUrl="Some Url2";
}
}
},
error: function (data) { alert("ERROR: " + data) }
} );
$.ajax( {
url: sharepointScenarioListUrl + abcUrl,
method: "GET",
headers: { "Accept": "application/json; odata=verbose" },
success: function (data) {
var items = data.d.results;
items.forEach( function(item) {
//some function
});
},
error: function (data) { alert("ERROR: " + data);
console.log(sharepointScenarioListUrl +
abcUrl);console.log(data);
}
} );
一个简单的更改可以解决此问题:
function firstCall()
{
var url;
var abcUrl;
$.ajax( {
url: sharepointBaseUrl + "_api/web/currentUser/groups?$select=title",
method: "GET",
headers: { "Accept": "application/json; odata=verbose" },
success: function (data) {
var items = data.d.results;
for (var i = 0, len = items.length; i < len; i++) {
if (items[i].Title == adminGroupName) {
self.currentUserIsAdmin(true);
abcUrl="Some Url1";
}
else{
abcUrl="Some Url2";
}
}
secondCall(abcUrl);
},
error: function (data) { alert("ERROR: " + data) }
} );
}
function secondCall(abcUrl)
{
$.ajax( {
url: sharepointScenarioListUrl + abcUrl,
method: "GET",
headers: { "Accept": "application/json; odata=verbose" },
success: function (data) {
var items = data.d.results;
items.forEach( function(item) {
//some function
});
},
error: function (data) { alert("ERROR: " + data);
console.log(sharepointScenarioListUrl +
abcUrl);console.log(data);
}
} );
}
我相信 abcUrl 是未定义的,因为第二个 AJAX 调用发生在第一个调用返回之前;由于 abcUrl 从未在您的代码中初始化,因此它是未定义的。如果要确保第二个 AJAX 调用仅在第一个调用返回后发生,则可以将第二个 ajax 调用放在第一个 AJAX 请求的成功回调中。
使用 jquery when
或 deferred
方法。
伪将是这样的:
//get URL for account type
getAccountURL()
//when done return URL
.done(function(url){
//get sharepoint URL
getSharePointURL(url)
};