133 lines
4.1 KiB
JavaScript
133 lines
4.1 KiB
JavaScript
|
||
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) {
|
||
/// <summary>获得完整地址</summary>
|
||
|
||
if (url[4] === ":" || url[5] === ":") return url;
|
||
return config.baseUri + url;
|
||
};
|
||
this.send = function (method, url, refer, data, responseType, done, failed, appendatt, headers) {
|
||
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),
|
||
headers: headers
|
||
};
|
||
|
||
var e = new CustomEvent("ajaxproxy", { detail: { data: xhrData, index: ajaxCount++ }, cancelable: true });
|
||
config.debug("begin request for " + xhrData.url);
|
||
if (!document.dispatchEvent(e)) {
|
||
requestMap[e.detail.index] = {
|
||
done: function () {
|
||
var args = [].slice.call(arguments);
|
||
done && done.apply(this, args);
|
||
def.resolveWith(this, args);
|
||
config.debug("done request for " + xhrData.url);
|
||
},
|
||
fail: function () {
|
||
var args = [].slice.call(arguments);
|
||
failed && failed.apply(this, args);
|
||
def.rejectWith(this, args);
|
||
config.debug("failed request for " + xhrData.url);
|
||
}
|
||
};
|
||
} 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, headers) {
|
||
/// <summary>以GET模式发送AJAX请求</summary>
|
||
/// <param name="url">要请求的地址</param>
|
||
/// <param name="refer">请求的引用地址</param>
|
||
/// <param name="data">要发送的数据</param>
|
||
/// <param name="responseType">要请求的地址</param>
|
||
/// <param name="done">完成请求的回调</param>
|
||
/// <param name="failed">请求失败的回调</param>
|
||
return that.send("GET", url, refer, data, responseType, done, failed, appendatt, headers);
|
||
};
|
||
this.sendPost = function (url, refer, data, responseType, done, failed, appendatt, headers) {
|
||
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 && data.url.indexOf("leftTicket") === -1) {
|
||
//404是个比较特殊的错误,这个错误一般是证书有问题
|
||
//但是切CDN也有可能导致这个问题,所以忽略查票请求的这个错误
|
||
document.dispatchEvent(new CustomEvent("networkOrCertificationError"));
|
||
}
|
||
|
||
data.success ? param.done.call(data || window, data.model) : param.fail.call(data || window, 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();
|
||
});
|