使用jQuery进行AJAX错误处理:我应该使用$ .ajaxSetup()还是$ .fn.ajaxError()

问题描述:

我想在用户发生AJAX错误时提醒用户。您可以通过$.ajaxSetup做到这一点:

$.ajaxSetup({ 
    error: function() { 
    alert("OOPS!") 
    } 
}); 

But the jQuery docs recommend against this

注:全球的回调函数应该 与各自全球 阿贾克斯事件处理 方法-.ajaxStart(),.ajaxStop(集), .ajaxComplete(),.ajaxError(), .ajaxSuccess(),.ajaxSend() - 而不是 之内的设置对象 $ .ajaxSetup()。

所以我想我应该这样做:

$("#some_random_div").ajaxError(function() { 
    alert("OOPS!") 
}); 

这没有意义,我:AJAX的错误回调属于我作为一个整体,而不是特定的页面元素的应用。那么为什么回调函数应该与一个单独的页面元素相关联?

所以:为什么jQuery文档建议使用看起来不太可读的方法,哪种方法最好?

+0

我更喜欢ajaxSetup用于此目的。 – Kris 2012-04-24 10:36:24

典型的用途是特定的页面元素绑定ajaxError到是要显示在您的错误信息会在div ;也许是页面顶部的“flash”消息div。这样你可以直接访问该div来追加你的消息。

但是,如果您不使用特定的DOM元素作为您的消息显示区域,那么您肯定可以将其绑定到$(document)或其他此类全局元素。

+2

jQuery 1.9中,ajax事件只能在'document'上使用,所以应该像'$(document).ajaxError(function(){...})'或'$(document).on(“ajaxError “,function(){...})'。文档说不使用'$ .ajaxSetup()'的原因是它们只是请求的* default *设置;任何定义它自己的'error'处理程序的请求都会破坏'$中的设置。ajaxSetup()'这可能不是你想要的。 – 2014-08-04 19:10:12

您可以连接起来的误差函数到全身像这样:

$('body').ajaxError(function() { 
    alert("OOPS!") 
}); 
+1

但是它的可读性不如'ajaxSetup()'方法?也就是说,这里的函数与文档的主体没有任何关系(换句话说,如果我可以通过用“主体”代替任何其他元素来达到同样的效果,这看起来就像是错误的方法) – 2010-07-27 20:04:49

可能存在它可能与单个控件相关的情况 - 例如当您有一个通过ajax往返数据库的自动完成时,而不是像提交时那样的整个页面。然后,这将确定是否要隔离页面组件上的错误,如果是这样,那么对错误的响应应该是什么,而不是采用更通用的方法。


该文档状态:

在jQuery 1.8的,所述.ajaxError()方法应当仅被附接到文件

http://api.jquery.com/ajaxError/