我有两个AJAX请求,我想根据用户是否为admin来更改第二个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);
}
} );
答案 0 :(得分:1)
一个简单的改变可以解决这个问题:
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);
}
} );
}
答案 1 :(得分:0)
我相信abcUrl是未定义的,因为第二个AJAX调用是在第一个AJAX调用返回之前发生的;由于abcUrl从未在代码中初始化,因此未定义。如果你想确保第二个AJAX调用只在第一个AJAX调用返回后发生,你可以在第一个AJAX请求的成功回调中放置第二个ajax调用。
答案 2 :(得分:0)
您可以使用jquery when
或deferred
方法。
伪将是这样的:
//get URL for account type
getAccountURL()
//when done return URL
.done(function(url){
//get sharepoint URL
getSharePointURL(url)
};