Ste*_*fan 0 ajax jquery promise
我正在尝试使用promises同步我的ajax请求:我当前的代码很简单:
var ajax = undefined;
$.ajax({
type: 'put',
url: url,
data: data,
cache: false,
successs: function () {
},
error: function () {
}
}).done(function () {
alert('done');
});
Run Code Online (Sandbox Code Playgroud)
只要ajax调用成功(状态代码200),但是当调用失败时(例如,显示无效的url),这样就可以正常工作了,不再调用done.即使ajax请求失败,我怎样才能执行完成=
斯特凡
有几种选择:
成功或失败时调用相同的功能.功能不具有可匿名联定义,你可以用名字分别定义它们,并相应地引用它们.
在你的代码片段,您同时使用旧的success(尽管有额外s末),并error 和更新的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");
}
Run Code Online (Sandbox Code Playgroud)
或使用done和fail:
var ajax = undefined;
$.ajax({
type: 'put',
url: url,
data: data,
cache: false
}).done(handler).fail(function() {
handler(null);
});
function handler() {
alert("Done");
}
Run Code Online (Sandbox Code Playgroud)
或者(或组合),有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");
}
Run Code Online (Sandbox Code Playgroud)
always:
var ajax = undefined;
$.ajax({
type: 'put',
url: url,
data: data,
cache: false
}).done(handler).fail(function() {
handler(null);
}).always(function() {
alert("Always called (after done/fail)");
});
function handler() {
alert("Done");
}
Run Code Online (Sandbox Code Playgroud)