如何使用带有成功和失败处理程序的引用重试Ajax调用

时间:2017-08-17 16:19:11

标签: javascript ajax

我正在尝试查看是否可以在失败时存储对ajax调用的引用,然后稍后重试该调用。我尝试过以下方法:

$.ajax({
    url: "controller/action",
    data: {
        params: "here"
    }
})
.success(function (response) {
    DoStuffHere();
})
.fail(function (error) {
    ajaxRef = this;
    DoOtherStuff();
})

DoOtherStuff尝试使用引用进行ajax调用,如下所示:

function DoOtherStuff() {
    if(ajaxRef)
    {
        $.ajax(ajaxRef);
    }
}

显然,这是过于简单化以展示我想要完成的事情。

这似乎实际上确实是ajax调用,但问题是它似乎没有引用调用的successfail属性。因此,当呼叫成功恢复时,它不会呼叫DoStuffHere();

在我搜索此问题的答案时,我发现代码表明如果您在$.ajax(this)success函数内调用fail,该代码就可以了,但在我的情况下,我需要在重试之前运行某些其他函数和ajax调用。

有没有办法让successfail携带对ajax调用的引用?

2 个答案:

答案 0 :(得分:1)

您是否尝试将成功/失败处理程序附加到ajax请求对象本身? 像这样:

var ajaxRef = {
    url: "controller/action",
    data: {
        params: "here"
    },
    success: ajaxSuccess,
    error: ajaxFailure
}

$.ajax(ajaxRef)

function ajaxSuccess(response){
    DoStuffHere();
}
function ajaxFailure(error){
    DoOtherStuff();
}

function DoOtherStuff() {
    if(ajaxRef)
    {
        $.ajax(ajaxRef);
    }
}

答案 1 :(得分:1)

我只知道为什么这不起作用。我不知道为什么我学会了使用.success().fail()处理程序来获取ajax,但显然他们并没有坚持使用这种方式。因此,当我将代码更改为以下内容时:

$.ajax({
    url: "controller/action",
    data: {
        params: "here"
    },
    success: function (response) {
        DoStuffHere();
    },
    error: function (error) {
        ajaxRef = this;
        DoOtherStuff();
    }
})

然后这实际上有效:

function DoOtherStuff() {
    if(ajaxRef) {
        $.ajax(ajaxRef);
    }
}

希望这对那里的人有帮助!