define(function (require, exports, module) { var EventObject = require("../platform/EventObject.js"); var config = require("../data.js"); var WebRequest = function () { var that = this; var requestMap = {}; var ajaxCount = 0; var jsonAtt = null; EventObject.apply(this, arguments); this.getFullUri = function (url) { /// 获得完整地址 if (url[4] === ":" || url[5] === ":") return url; return config.baseUri + url; }; this.send = function (method, url, refer, data, responseType, done, failed, appendatt) { var def = new $.Deferred(); if (appendatt) { data = $.extend({ _json_att: jsonAtt || "" }, data); } var xhrData = { url: that.getFullUri(url), data: data, timeout: 120000, type: method, dataType: responseType, refer: that.getFullUri(refer) }; var e = new CustomEvent("ajaxproxy", { detail: { data: xhrData, index: ajaxCount++ }, cancelable: true }); if (!document.dispatchEvent(e)) { requestMap[e.detail.index] = { done: function () { var args = [].slice.call(arguments); done && done.apply(this, args); def.resolveWith(this, args); }, fail: function() { var args = [].slice.call(arguments); failed && failed.apply(this, args); def.rejectWith(this, args); } }; } else { document.dispatchEvent(new CustomEvent("requestSupportError")); def.rejectWith("平台错误"); } return def; }; this.loadImage = function (url, refer, done, failed) { var def = new $.Deferred(); var e = new CustomEvent("ajaxLoadVerifyCode", { detail: { url: that.getFullUri(url), refer: that.getFullUri(url), index: ajaxCount++ }, cancelable: true }); if (!document.dispatchEvent(e)) { requestMap[e.detail.index] = { done: function () { var args = [].slice.call(arguments); done && done.apply(this, args); def.resolveWith(this, args); }, fail: function () { var args = [].slice.call(arguments); failed && failed.apply(this, args); def.rejectWith(this, args); } }; } else { document.dispatchEvent(new CustomEvent("requestSupportError")); def.rejectWith("平台错误"); } return def; }; this.sendGet = function (url, refer, data, responseType, done, failed, appendatt) { /// 以GET模式发送AJAX请求 /// 要请求的地址 /// 请求的引用地址 /// 要发送的数据 /// 要请求的地址 /// 完成请求的回调 /// 请求失败的回调 return that.send("GET", url, refer, data, responseType, done, failed, appendatt); }; this.sendPost = function (url, refer, data, responseType, done, failed, appendatt) { var args = [].slice.call(arguments); args.unshift("POST"); return that.send.apply(this, args); }; document.addEventListener("ajaxproxyfinished", function (e) { var data = e.detail; if (!requestMap[data.index]) return; var param = requestMap[data.index]; delete requestMap[data.index]; if (data.status === 404) { //404是个比较特殊的错误,这个错误一般是证书有问题 document.dispatchEvent(new CustomEvent("networkOrCertificationError")); } data.success ? param.done.call(data, data.model) : param.fail.call(data, data.model); }); Object.defineProperties(this, { "userAtts": { get: function () { return jsonAtt || ""; }, set: function (value) { jsonAtt = value; } } }); }; WebRequest.prototype = Object.create(EventObject); WebRequest.constructor = WebRequest; module.exports = new WebRequest(); });