谁可以帮助我?
我不明白 $.ajax
中的 success
和 .done()
的区别。
如果可能的话,请提供示例。
谁可以帮助我?
我不明白 $.ajax
中的 success
和 .done()
的区别。
如果可能的话,请提供示例。
success
只有在AJAX调用成功时才会触发,即最终返回HTTP 200状态码时。 error
在失败时触发,complete
则在请求完成后触发,无论成功与否。
在jQuery 1.8中,jqXHR
对象(由$.ajax
返回)将success
替换为done
,error
替换为fail
,complete
替换为always
。
然而,您仍然可以使用旧的语法初始化AJAX请求。因此,以下这些操作是类似的:
// set success action before making the request
$.ajax({
url: '...',
success: function(){
alert('AJAX successful');
}
});
// set success action just after starting the request
var jqxhr = $.ajax( "..." )
.done(function() { alert("success"); });
这一变更是为了兼容 jQuery 1.5 的 deferred 对象。Deferred(现在还有 Promise
,在 Chrome 和 FX 中已经具有完全的原生浏览器支持)允许您链接异步操作:
$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
这个函数链比使用 success
得到的嵌套回调金字塔更易于维护。
但请注意,done
现在已被弃用,建议改用使用 then
的 Promise
语法:
$.ajax("parent").
then(function(p) { return $.ajax("child/" + p.id); }).
then(someOtherDeferredFunction).
then(function(c) { alert("success: " + c.name); }).
catch(function(err) { alert("error: " + err.message); });
这值得采用,因为 async
和 await
扩展了Promise的语法(和错误处理):
try {
var p = await $.ajax("parent");
var x = await $.ajax("child/" + p.id);
var c = await someOtherDeferredFunction(x);
alert("success: " + c.name);
}
catch(err) {
alert("error: " + err.message);
}
success
,而在jQuery 1.8中被done
替换了。它们的工作方式相同,但是done
与jQuery的其他部分更加一致。 - Keith.done
是jQuery早期(现在已经死胡同)尝试成为Promise
的一部分,而现在Promise
已经有了相当全面的语言支持。在新项目中,我会使用const response = await fetch(...)
代替。 - Keithsuccess:
作为参数和在 jqXHR
上作为方法的 .success()
之间有区别。后者正在被弃用,但前者是OP所问的内容。 - Alnitak.success()
只有在您的 Web 服务器响应 200 OK HTTP 标头时才会被调用 - 基本上是当一切正常时。
附加到 done() 的回调函数将在延迟解决时触发。附加到 fail() 的回调函数将在延迟被拒绝时触发。
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
success
是在请求成功时被调用的回调函数,它是 $.ajax
调用的一部分。而 done
实际上是由 $.ajax()
返回的 jqXHR
对象的一部分,在 jQuery 1.8 中替代了 success
。