1 /*
2 * 以下为程序错误码
3 */
4 //通用的请求失败,包括未知原因
5 var EXPECTATION_FAILED = 417;
6 var EXPECTATION_QUERY = 404 7
8 /**
9 * 访问后台的对象,为ajax封装
10 * @constructor
11 12 var Query = function (url,param,callback,contentType) {
13 this.url = url;
14
15 先确认参数存在,如果不存在则创建空map
16 if (!param) {
17 param = new Map();
18 }
19 注意,要根据不同的传输格式来确定传输的值的类型
20 if (contentType == Query.NOMAL_TYPE) {
21 this.param = JSON.parse(this._convertParam(param));
22 } else {
23 this.param = ._convertParam(param);
24 25
26
27 this.callback = callback;
28 this.contentType = contentType;
29 请求超时,默认5秒
30 this.timeout = 5000 31 是否异步请求,默认异步
32 this.async = true 33 }
34
35 Query.JSON_TYPE = 'application/json' 36 Query.NOMAL_TYPE = 'application/x-www-form-urlencoded' 37
38 39 * ajax请求的访问
40 * @param url 要访问的地址
41 * @param paramMap 传给后台的Map参数,key为字符串类型
42 * @param callback 回调函数
43 * @param contentType 传输数据的格式 默认传输application/x-www-form-urlencoded格式
44 45 Query.create = 46 return Query(url,Query.NOMAL_TYPE);
47 48
49 Query.createJsonType = 50 51 52
53 54 * 将ParamMap转为json格式,目前只支持Map对象,以后会扩展
55 * @param paramMap
56 * @private
57 58 Query.prototype._convertParam = (param) {
59
60 if (param instanceof Map) {
61 return strMap2Json(param);
62 63 64
65 66 * 对ajax回调函数的封装
67 * @param callBack
68 69 70 Query.prototype._callback = (queryResult) {
71
72 取消加载框
73 if (.loadDom) {
74 $(this.loadDom).remove("#loadingDiv");
75 76
77 Query对象
78 var self = queryResult.queryObj;
79 var data = $.parseJSON(queryResult.responseText);
80 记录请求是否有错误
81 self.queryException = false 82 var handleError;
83
84 if (queryResult.status == EXPECTATION_FAILED || queryResult.status == EXPECTATION_QUERY) {
85 var error = queryResult.responseText;
86 self.queryException = 87 88
89 调用回调函数,如果返回结果为true,则对于出错不会默认错误处理
90 if (self.callback Function) {
91 handleError = self.callback(data);
92 93
94 如果出现了异常并且没有被处理,那么将进行默认错误处理
95 if (self.queryException && !handleError) {
96 window.location.href = "/system/error/" + error.code + "/" + error.msg;
97 98
99 如果需要跳转,则进行跳转
100 if (data.redirect_url) {
101 window.location.href = data.redirect_url;
102 103 104
105 106 * 正式发送ajax
107 108 109 Query.prototype.sendMessage = () {
110 var self = 111 var xhr = $.ajax(
112 {
113 type: "post",114 url: .url,1)">115 contentType: .contentType,1)">116 data: .param,1)">117 ajax发送前调用的方法,初始化等待动画
118 @param XHR XMLHttpRequest对象
119 beforeSend: (XHR) {
120 绑定本次请求的queryObj
121 XHR.queryObj = self;
122 if (self.beforeSendFunc 123 self.beforeSendFunc(XHR);
124 }
125
126 if (self.loadDom HTMLElement) {
127 self.loadDom.innerText = ""128 $(self.loadDom).append("<div id='loadingDiv' class='loading'><img src='/image/loading.gif'/></div>"129 } else jQuery) {
130 self.loadDom.empty();
131 self.loadDom.append("<div id='loadingDiv' class='loading'><img src='/image/loading.gif'/></div>"132 133 },1)">134 complete: ._callback,1)">135 timeout:.timeout,1)">136 async:.async
137 }
138 );
139
140 141
142 143 * 检测是否有错误,返回ture有错误,或者false
144 145 Query.prototype.checkEception = 146 .queryException;
147 148
149 ------------------------以下为对Query的参数设置---------------------------
150 151 * 在ajax发送前设置参数,可以有加载的动画,并且请求完成后会自动取消
152 * @param loadDom 需要显示动画的dom节点
153 * @param beforeSendFunc ajax发送前的自定义函数
154 155 Query.prototype.setBeforeSend = (loadDom,beforeSendFunc) {
156 this.loadDom = loadDom;
157 this.beforeSendFunc = beforeSendFunc;
158 159
160 161 * 设置超时时间
162 * @param timeout
163 164 Query.prototype.setTimeOut = (timeout) {
165 this.timeout = timeout;
166 167
168 Query.prototype.setAsync = (async) {
169 this.async = async;
170 }
1 2 * 访问后台的类,构造form表单来进行post请求
3 * @param url
4 * @param paramMap 参数map
5 6 7 var QueryForm = 8 form表单的JQ对象
9 this.form = $("<form></form>"10 this.form.attr("action"11 this.form.attr("method","post"12 遍历Map
13 for( [key,value] of paramMap){
14 var inputDom = $("<input/>") ;
15 inputDom.attr("name"16 inputDom.attr("value"17 .form.append(inputDom);
18 19 必须要放入body里面,不然请求发不出去
20 var bodyDom = $("body"21 bodyDom.append(.form);
22 .sendMessage();
23
24 发送完后销毁
25 .destroy();
26 27
28 QueryForm.create = 29 QueryForm(url,paramMap);
30 31
32 QueryForm.prototype.sendMessage = 33 .form.submit();
34 35
36 QueryForm.prototype.destroy = 37 .form.remove();
38 }