如果API服务器返回http 500,则AJAX调用不会进入“error:”阻止

时间:2016-06-13 03:07:12

标签: javascript ajax

我想在我的javascript代码中实现重试逻辑。这就是我调用API的方式:

$.ajax({
            url: api_url + 'report',
            type: 'GET',
            dataType: 'json',
            async: false,
            tryCount : 0,
            retryLimit : 3,

            headers: {
                "Authorization": "Basic " + btoa(api_username + ":" + api_pass)
            },

            data: {start: start_date, end: end_date},
            success: function(result) {
                data = result.results;
                console.log("success");
            },
            error : function(xhr, textStatus, errorThrown ) {
                console.log("in error");
                if (textStatus == 'timeout') {
                    this.tryCount++;
                    if (this.tryCount <= this.retryLimit) {
                        //try again
                        console.log("try count:");
                        console.log(this.tryCount);
                        $.ajax(this);
                        return;
                    }            
                    return;
                }
                if (xhr.status == 500) {
                    console.log("still 500");
                } else {
                    console.log("still !500");
                }
            }
        });

所以当服务器出现问题并且它返回http 500时,我上面的JS文件中的控件仍然没有进入“error:”块和这一行:“console.log(”in error“) ;”没有打印在控制台上。

如果我的服务器返回500,我怎样才能在代码中正确实现重试逻辑,然后它应该继续重试x次?

1 个答案:

答案 0 :(得分:1)

500错误通常意味着后端服务器出现问题。所以它不会进入客户端JavaScript的错误块。我认为你无能为力。但总的来说,如果可能的话,你总是可以要求后端开发人员做更好的错误处理并返回错误响应。