拦截 jQuery Ajax success 时机点

场景:

返回的 json 数据拥有统一的格式,如 {status:0, result:{}}。

需要在回调客户 success 方法前对数据进行处理,比如特殊的 status:-1 表示数据错误,而 result 包含错的 map 信息,在此时喷到 document 中。

方案:

不包装新的方法也不允许改动 jQuery 库,还必须支持 jQuery 所有的 Shorthand Methods,解决方案如下代码(比较简单,不解释了)。

 

 1 /// <reference path="jquery-2.0.3.js" />
 2 (function() {
 3     $.itp = $.itp || { version: ‘0.0.1‘ };
 4     $.ajaxPrefilter(function(options) {
 5         if (options.success && typeof options.success === "function") {
 6             options.__success__ = options.success;
 7             options.success = function (data, textStatus, xhr) {
 8                 if (data) {
 9                     // 可以做一些数据处理后在仍到 xhr.responseJSON。
10                 } else {
11                     // 比如,传递一个状态码,表示不呼叫 success 方法。
12                     options.__status__ = -1;
13                 }
14             };
15         }
16     });
17 
18     $(document).ajaxSuccess(function(event, xhr, settings) {
19         if (settings.__status__ && settings.__status__ === -1)
20             return;
21         if (settings.__success__ && typeof settings.__success__ === "function")
22             settings.__success__(xhr.responseJSON);
23     });
24 
25     //使用方法
26     $.ajax("/home/test", {
27         type: "POST",
28         data: JSON.stringify({ models: [{ name: "foo" }] }),
29         dataType: "JSON",
30         contentType: "application/json",
31         success: function(data) {
32         }
33     });
34 })();

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。