jQuery.ajax handling continue responses: “success:” vs “.done”?
我已经使用jQuery和AJAX几周了,我看到两种不同的方法在调用完成后"继续"脚本:
从jQuery文档的概要我们得到:
.done(): Description: Add handlers to be called when the Deferred object is resolved.
success: (.ajax() option): A function to be called if the request succeeds.
因此,在AJAX调用完成/解决之后,两者都做了一些事情。 我可以随机使用其中一个吗? 有什么区别,什么时候使用而不是另一个?
例如,成功:
1 2 3 4 | $.ajax({ url: '/', success: function(data) {} }); |
例如,完成:
1 | $.ajax({url: '/'}).done(function(data) {}); |
关于
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | function xhr_get(url) { return $.ajax({ url: url, type: 'get', dataType: 'json', beforeSend: showLoadingImgFn }) .always(function() { // remove loading image maybe }) .fail(function() { // handle request failures }); } xhr_get('/index').done(function(data) { // do stuff with index data }); xhr_get('/id').done(function(data) { // do stuff with id data }); |
在可维护性方面,这一点的一个重要好处是,您已将ajax机制包装在特定于应用程序的函数中。如果你决定将来需要
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function xhr_get(url) { return $.ajax({ url: url, type: 'get', dataType: 'json' }) .pipe(function(data) { return data.responseCode != 200 ? $.Deferred().reject( data ) : data; }) .fail(function(data) { if ( data.responseCode ) console.log( data.responseCode ); }); } xhr_get('/index').done(function(data) { // will not run if json returned from ajax has responseCode other than 200 }); |
在此处阅读有关
注意:从jQuery 1.8开始,
如果在ajax中需要
这是来自jQuery官方网站:
As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done().