这是我当前的代码,该代码正在调用api并会执行某些操作
function callApiAjax(url,token){
var settings = {
"async": true,
"crossDomain": true,
"url": url,
"method": "GET",
"headers": {
"token": token,
}
};
var callAPI = $.ajax(settings);
callAPI.done(function(){
doSomethingWhenSuccess();
});
callAPI.fail(function(){
doSomethingWhenFail();
});
}
它可以工作,但有时令牌会过期。我还有另一个可以更新令牌的API。所以我想将另一个api添加到fail函数。 我可以那样做吗?
function callApiAjax(token,retry) {
var settings = {
"async": true,
"crossDomain": true,
"url": url,
"method": "GET",
"headers": {
"token": token,
}
};
var callAPI = $.ajax(settings);
callAPI.done(function () {
doSomethingWhenSuccess();
});
callAPI.fail(function () {
if(retry){
var updateTokenSetting = {
"async": true,
"crossDomain": true,
"url": url,
"method": "GET",
"headers": {
"token": token,
}
};
var updateToken = $.ajax(updateTokenSetting);
updateToken.done(function (response) {
//Set the original settings.headers.token to response.data.token;
//Redo the "CallAPI" ajax Call Once
});
updateToken.fail(function () {
doSomethingWhenFail();
});
}else{
doSomethingWhenFail();
}
});
}
我不想复制故障功能中的设置,因为我认为这太复杂且难以阅读,但是我不知道如何仅更新令牌并重做ajax调用 only < / em>一次。
有什么办法解决我的问题吗?
答案 0 :(得分:2)
您可以简单地执行以下操作:
updateToken.done(function(response){
callApiAjax(response.data.token, false);
}
答案 1 :(得分:0)
不,您不能将令牌api调用为fail函数。但是您可以像这样重新组织代码语句。
function callApiAjax(token,retry) {
var settings = {
"async": true,
"crossDomain": true,
"url": url,
"method": "GET",
"headers": {
"token": token,
}
};
var callAPI = $.ajax(settings);
callAPI.done(function () {
doSomethingWhenSuccess();
});
callAPI.fail(function () {
if(retry){
var updateToken = $.ajax(settings);
updateToken.done(function (response) {
//Set the original settings.headers.token to response.data.token;
//Redo the "CallAPI" ajax Call Once
});
updateToken.fail(function () {
doSomethingWhenFail();
});
}else{
doSomethingWhenFail();
}
});
}