关于javascript:失败时重试jquery ajax

retry jquery ajax on failure

我对控制器中的动作进行了jquery-ajax调用。 有时呼叫失败,所以我想再次重试。

jQuery的AJAX:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
return ajax({
    url: getRootDir() + urlDoTask, // urlDoTask is something like"/Action/"
    data: { param: someParam },
    type: 'POST',
    dataType: 'json',
    tryCount: 0,
    retryLimit: 3
}).then(function (data) {
    // Do some stuff
    return ....
}, function (xhr, textStatus, errorThrown) {

    if (textStatus == 'timeout' || (xhr.responseText =="" && textStatus == 'error')) {
        this.tryCount++; // this is always 1
        if (this.tryCount <= this.retryLimit) {
            //try again
            $.ajax(this);
            return;
        }
        return; // this point is never reached
    }
    if (xhr.status == 404) {
        // Do some stuff
    }

    return ... // I want to reach it after this.tryCount > this.retryLimit
});

function getRootDir() {
    var loc = window.location.pathname;
    var dir = loc.substring(0, loc.lastIndexOf('/'));

    return dir;
}

上面的代码不起作用,每次ajax-call失败时tryCount总是1。 此外,一旦this.tryCount大于this.retryLimit,就永远不会达到最后一次返回。

想法?


我看到的东西很少。 传入的参数实际上不是对象的成员。 它只是一个密钥/对的JSON映射。 因此函数中不存在"this.tryCount"之类的东西。 您可以做的是在您的函数(或调试)中放置警报,并查看值是什么。 可能他们是未定义或0。