代码之家  ›  专栏  ›  技术社区  ›  Murasaki Aikon

更新设置并在ajax失败时重试

  •  0
  • Murasaki Aikon  · 技术社区  · 6 年前

    这是我当前的代码,它正在调用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可以更新令牌。所以我想在fail函数中添加另一个api。

    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();
            }
    
        });
    
    }
    

    我不想复制fail函数中的设置,因为我认为这太复杂,很难读取,但是我不知道如何只更新令牌并重新执行ajax调用 只有 一次。

    你知道怎么解决我的问题吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Titus    6 年前

    你可以做这样的事情:

    updateToken.done(function(response){
        callApiAjax(response.data.token, false);
    }
    
        2
  •  0
  •   Mustafa Tığ    6 年前

    不,你不能做任何事,你必须调用令牌api进入失败函数。但是你可以像这样重新组织你的代码声明。

    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();
        }
    
    });
    
    }