重试AJAX请求将忽略成功回调

时间:2018-11-29 09:12:41

标签: javascript jquery ajax

如果令牌过期,我正在尝试刷新AJAX调用。使用ajaxSetup一切正常,但是请求忽略success回调。

$.ajax({
  url: _url
  //async: false,
  type: 'POST'
}).success(function(jsonP) {
  console.log(jsonP);
}).error(
  // ...
);

$.ajaxSetup({
  tryCount: 0,
  retryLimit: 2,
  error: function(xhr, textStatus, errorThrown) {
    if (xhr.status == 401 && (JSON.parse(localStorage.getItem('Auth')).user[0] != null)) {
      refreshToken();
      var request = this;
      request.tryCount++;
      setTimeout(function() {
        if (request.tryCount <= request.retryLimit) {
          //try again
          $.ajax(request);
          $('#loading-modal').modal('hide');
        } else {
          alert("Problème de connexion");
        }
      }, 1000);
      return;
    } else {
      /* alert("Problème d'authentification");
      $(".logout").trigger('click'); */
    }
    if (xhr.status == 500) {
      //handle error
    } else {
      //handle error
    }
  }
});

1 个答案:

答案 0 :(得分:0)

他们在$ .ajax()中有错误;句法。当我运行该代码时,它说成功不是功能。因此,我在$ .ajax语法下也进行了更正:

JS代码:

方法1 :参考链接:http://api.jquery.com/jquery.ajax/

$.ajax({
    url: "https://www.google.co.in/abc.php", // _url, for time being replaced _url with another url
    //async: false,
    type: 'POST'
}).done(function(jsonP) {
    console.log("jsonP=", jsonP);
}).fail(function() {
    // ...
    console.log("Error Occurred");
});

OR

方法2 :在$ .ajax中使用成功和错误功能的旧风格

$.ajax({
    url: "https://www.google.co.in/abc.php", // _url, for time being replaced _url with another url
    //async: false,
    type: 'POST',
    /*error: function() {
        console.log("Error occurred");
    },*/
    success: function(jsonP) {
        console.log("jsonP=", jsonP);
    }
});

还有一点需要注意的是,如果$ .ajax()请求包含它自己的“错误”处理函数,则它将忽略以$ .ajaxSetup方法编写的错误函数。

$.ajaxSetup({
    tryCount: 0,
    retryLimit: 2,
    error: function(xhr, textStatus, errorThrown) {
        if (xhr.status == 401) {
            refreshToken();
            var request = this;
            request.tryCount++;
            setTimeout(function() {
                if (request.tryCount <= request.retryLimit) {
                    //try again
                    $.ajax(request);
                    $('#loading-modal').modal('hide');
                } else {
                    alert("Problème de connexion");
                }
            }, 1000);
            return;
        } else {
            // commented existing code for testing purpose only
            /* alert("Problème d'authentification");
            $(".logout").trigger('click'); */

            // for time being I had added here refresh ajax code to verify whether it's working fine or not
            var request = this;
            request.tryCount++;
            setTimeout(function() {
                if (request.tryCount <= request.retryLimit) {
                    //try again
                    $.ajax(request);
                    // $('#loading-modal').modal('hide');
                } else {
                    alert("Problème de connexion");
                }
            }, 1000);
            return;
        }
        if (xhr.status == 500) {
            //handle error
        } else {
            //handle error
        }
    }
});

与“成​​功”回调忽略有关,以确保其正常工作。我刚刚更改了console.log FROM :console.log(jsonP);

TO :console.log(“ jsonP =”,jsonP);

成功回调正在运行。我猜这是由于错误的ajax语法无法正常工作。