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

标签 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();

在我寻找这个问题的答案时,我发现代码说如果你在 success 中调用 $.ajax(this) 它会起作用>fail 函数,但在我的例子中,我需要在重试之前运行某些其他函数和 ajax 调用。

有什么方法可以使 successfail 与对 ajax 调用的引用一起携带?

最佳答案

您是否尝试过将成功/失败处理程序附加到 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);
    }
}

关于javascript - 如何使用成功和失败处理程序的引用重试 Ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45740318/

相关文章:

javascript - 如何修改它以使用数组中的所有项目?

javascript - jQuery 通过 1 次调用重新加载多个数据表

javascript - 如何在剑道 ListView 中更改数据源

javascript - Ajax 参数在传递到 Java Controller 时会被加密

javascript - 即使在ajax提交后,jquery中的数组仍保留旧数据

javascript - "google is undefined"

javascript - 动态添加输入字段并将数据保存到数据库

javascript - 为什么在jsonp请求中看不到jquery注入(inject)的script标签?

javascript - 使用 JavaScript 将 ajax 日历值转换为文本框模糊事件中的日期时间

javascript:如何在没有jquery或其他库的情况下将表单数据序列化为字符串