我正在尝试查看是否可以在失败时存储对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调用,但问题是它似乎没有引用调用的success
或fail
属性。因此,当呼叫成功恢复时,它不会呼叫DoStuffHere();
在我搜索此问题的答案时,我发现代码表明如果您在$.ajax(this)
或success
函数内调用fail
,该代码就可以了,但在我的情况下,我需要在重试之前运行某些其他函数和ajax调用。
有没有办法让success
和fail
携带对ajax调用的引用?
答案 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);
}
}
希望这对那里的人有帮助!