我尝试使用promises同步我的ajax请求: 我目前的代码很简单:
var ajax = undefined;
$.ajax({
type: 'put',
url: url,
data: data,
cache: false,
successs: function () {
},
error: function () {
}
}).done(function () {
alert('done');
});
只要ajax调用成功(状态代码200),但是当调用失败时(例如显示无效的url),这样就可以正常工作了,不再调用已完成的操作。 即使ajax请求失败=
,如何执行done的Stefan
答案 0 :(得分:5)
为您提供几种选择:
成功或失败时调用相同的功能。函数不具有是匿名的并且是内联定义的,您可以使用名称单独定义它们并相应地引用它们。
在您的代码段中,您使用的是较早的success
(虽然末尾有额外的s
)和error
以及较新的{{ {1}},这意味着您要为成功定义两个不同的回调(done
和success
)。只需一个即可。
以下是使用done
和success
的示例,将error
传递到null
上的处理程序中:
error
或使用var ajax = undefined;
$.ajax({
type: 'put',
url: url,
data: data,
cache: false,
success: handler,
error: function() {
handler(null);
}
});
function handler() {
alert("Done");
}
和done
:
fail
或者(或组合),有var ajax = undefined;
$.ajax({
type: 'put',
url: url,
data: data,
cache: false
}).done(handler).fail(function() {
handler(null);
});
function handler() {
alert("Done");
}
回调(您在选项中指定的回调)和complete
回调(always
和done
样式) ,无论成功或失败,都会被调用(在成功或失败回调完成之后):
fail
:
complete
var ajax = undefined;
$.ajax({
type: 'put',
url: url,
data: data,
cache: false,
success: handler,
error: function() {
handler(null);
},
complete: function() {
alert("Always called (after success/error)");
}
});
function handler() {
alert("Done");
}
:
always
答案 1 :(得分:0)
您可以使用done
设置:
complete
功能
$.ajax({
type: 'put',
url: url,
data: data,
cache: false,
successs: function () {
},
error: function () {
}
complete: function(jqXHR, textStatus) {
alert("Done");
});
complete
函数在success
或error
之后执行。有关详细信息,请查看jQuery ajax文档。
如果您不关心实际的success
和error
回调,并且只想在调用完成后执行某些操作,无论结果如何,请忽略success
和{{1}完全设置。
答案 2 :(得分:0)
没有必要完成
$.ajax({
type: 'post',
url: url,
data: data,
cache: false,
success: function () {
alert('success');
},
error: function () {
alert('error');
},
complete: function(){
alert('complete');
}
});