jQuery的ajax本来就很方便了,为啥还要在进一步的封装呢?这个首先要看项目的具体需求了,如果觉得不需要,那么完全可以直接用jQuery提供的各种ajax的方法。如果像我似地,感觉不太方便的话,那么完全可以按照自己的想法和需求来再次封装一下。
需求:
1、调用的时候更加的简单。
2、可以灵活的做各种设置和变化。
3、可以满足一些通用的需求。比如出错的时候给出提示。
项目现状:
做ajax请求的时候,会有一个加载的动画,在ajax发起的时候要自动开始,加载完毕之后要自动停止。出错了也要自动停止,并且给出错误提示。请求的URL比较固定,按照增删改查来分类。要可以跨域,也可以不跨域。需要灵活的进行切换。ajax获得数据的同时,还会附带一段调试信息,需要显示出来。有专门的处理函数,但是需要调用。
实现:
直接上代码吧。
//对ajax的封装 Nature.Ajax = function (ajax) { 最基础的一层封装 定义默认值 var defaultInfo = { type: "GET",访问方式:如果dataPata不为空,自动设置为POST;如果为空设置为GET。 dataType: Nature.sendDataType,0); line-height:1.5!important">数据类型:JSON、JSONP、text。由配置信息来搞定,便于灵活设置 cache: true,0); line-height:1.5!important">是否缓存,默认缓存 xhrFields: { 允许跨域访问时添加cookie。cors跨域的时候需要设置 withCredentials: true },urlPata: {},url后面的参数。一定会加在url后面,不会加到form里。 formPata: {},0); line-height:1.5!important">表单里的参数。如果dataType是JSON,一定加在form里,不会加在url后面;如果dataType是JSONP的话,只能加在url后面。 url: //依靠上层指定 timeout: 2000, error: function() { },0); line-height:1.5!important">如果出错,停止加载动画,给出提示。也可以增加自己的处理程序 success: function() { } 成功后显示debug信息。也可以增加自己的处理程序 }; 补全ajaxInfo if (typeof ajaxInfo.dataType == "undefined") { ajaxInfo.dataType = defaultInfo.dataType; } typeof ajaxInfo.formPata == "undefined") { ajaxInfo.type = "GET"; } else { if (ajaxInfo.dataType == "JSON") { ajaxInfo.type = "POST"; } else { get或者jsonp ajaxInfo.type = "POST"; } ajaxInfo.data = ajaxInfo.formPata; } typeof ajaxInfo.cache == "undefined") { ajaxInfo.cache = defaultInfo.cache; } 处理URL typeof ajaxInfo.urlPata != "undefined") { var tmpUrlPara = ""; var para = ajaxInfo.urlPata; for (var key in para) { tmpUrlPara += "&" + key + "=" + para[key]; } if (ajaxInfo.url.indexOf('?') >= 0) { 原地址有参数,直接加 ajaxInfo.url += tmpUrlPara; } else { 原地址没有参数,变成?再加 ajaxInfo.url += tmpUrlPara.replace('&','?'); } } 开始执行ajax $.ajax({ type: ajaxInfo.type,dataType: ajaxInfo.dataType,cache: ajaxInfo.cache,xhrFields: { 允许跨域访问时添加cookie withCredentials: function() { 访问失败,自动停止加载动画,并且给出提示 alert("提交" + ajaxInfo.title + "的时候发生错误!"); typeof top.spinStop != "undefined") top.spinStop(); typeof ajaxInfo.error == "function") ajaxInfo.error(); },success: function (data) { typeof(parent.DebugSet) != "undefined") parent.DebugSet(data.debug); //调用显示调试信息的函数。 typeof (ajaxInfo.ctrlId) == "undefined") ajaxInfo.success(data); else { ajaxInfo.success(ajaxInfo.ctrlId,data); } } }); };
这是最底层的封装,然后是根据URL的封装,其实就是避免在代码里到处写URL的问题。
1 Nature.Data.MetaData = function () {
2
3 var ajax = Nature.Ajax;简化一下
4
5
6 /*获取页面视图的元数据*/
7 this.ajaxGetMeta = function (ajaxData) {
8
9 ajaxData.url = Nature.resourceUrl + "/MetaData/GetMeta.ashx";
10 ajaxData.cache = false;
11
12 ajax(ajaxData);
13 };
14
15
16
17 }
18
19 Nature.Data.CusData = 20
21 var ajax = Nature.Ajax;
22
23 34 获取客户数据
35 this.ajaxGetData = function(ajaxData) {
36
37 增删改查服务的网址
38 var url = Nature.resourceUrl;
39 typeof ajaxData.url == "undefined")
40 url += "/Data/GetData.ashx";
41 else
42 url += ajaxData.url;
43
44 ajaxData.url = url;
45 ajaxData.cache = 46
47 ajax(ajaxData);
48
49 };
50
51 删除数据52 this.ajaxDeleteData = 53 54
55 56 url += "/Data/GetData.ashx";
57 58 url += ajaxData.url;
59
60 ajaxData.url = url;
61 ajaxData.cache = 62
63 ajax(ajaxData);
64 };
65
66
67 }