Light12306/Web12306/js/platform/webRequest.js

133 lines
4.1 KiB
JavaScript
Raw Normal View History

2014-05-29 19:41:38 +08:00

define(function (require, exports, module) {
var EventObject = require("../platform/EventObject.js");
var config = require("../data.js");
2014-06-12 21:36:05 +08:00
var WebRequest = function () {
2014-05-29 19:41:38 +08:00
var that = this;
var requestMap = {};
var ajaxCount = 0;
2014-06-12 21:36:05 +08:00
var jsonAtt = null;
2014-05-29 19:41:38 +08:00
EventObject.apply(this, arguments);
2014-06-12 21:36:05 +08:00
this.getFullUri = function (url) {
2014-05-29 19:41:38 +08:00
/// <summary>获得完整地址</summary>
if (url[4] === ":" || url[5] === ":") return url;
return config.baseUri + url;
};
2014-09-13 15:58:20 +08:00
this.send = function (method, url, refer, data, responseType, done, failed, appendatt, headers) {
2014-08-20 20:58:24 +08:00
var def = new $.Deferred();
2014-06-27 22:25:42 +08:00
if (appendatt) {
2014-06-12 21:36:05 +08:00
data = $.extend({
2014-06-27 22:25:42 +08:00
_json_att: jsonAtt || ""
2014-06-12 21:36:05 +08:00
}, data);
}
2014-05-29 19:41:38 +08:00
var xhrData = {
url: that.getFullUri(url),
data: data,
timeout: 120000,
2014-06-27 22:25:42 +08:00
type: method,
2014-05-29 19:41:38 +08:00
dataType: responseType,
2014-09-13 15:58:20 +08:00
refer: that.getFullUri(refer),
headers: headers
2014-05-29 19:41:38 +08:00
};
var e = new CustomEvent("ajaxproxy", { detail: { data: xhrData, index: ajaxCount++ }, cancelable: true });
2015-03-13 19:25:08 +08:00
config.debug("begin request for " + xhrData.url);
2014-05-29 19:41:38 +08:00
if (!document.dispatchEvent(e)) {
requestMap[e.detail.index] = {
2014-08-20 20:58:24 +08:00
done: function () {
var args = [].slice.call(arguments);
done && done.apply(this, args);
def.resolveWith(this, args);
2015-03-13 19:25:08 +08:00
config.debug("done request for " + xhrData.url);
2014-08-20 20:58:24 +08:00
},
2014-08-21 17:00:33 +08:00
fail: function () {
2014-08-20 20:58:24 +08:00
var args = [].slice.call(arguments);
failed && failed.apply(this, args);
def.rejectWith(this, args);
2015-03-13 19:25:08 +08:00
config.debug("failed request for " + xhrData.url);
2014-08-20 20:58:24 +08:00
}
2014-05-29 19:41:38 +08:00
};
} else {
2014-06-12 21:36:05 +08:00
document.dispatchEvent(new CustomEvent("requestSupportError"));
2014-08-20 20:58:24 +08:00
def.rejectWith("平台错误");
2014-06-12 21:36:05 +08:00
}
2014-08-20 20:58:24 +08:00
return def;
2014-06-12 21:36:05 +08:00
};
this.loadImage = function (url, refer, done, failed) {
2014-08-20 20:58:24 +08:00
var def = new $.Deferred();
2014-06-12 21:36:05 +08:00
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] = {
2014-08-20 20:58:24 +08:00
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);
}
2014-06-12 21:36:05 +08:00
};
} else {
document.dispatchEvent(new CustomEvent("requestSupportError"));
2014-08-20 20:58:24 +08:00
def.rejectWith("平台错误");
2014-05-29 19:41:38 +08:00
}
2014-08-20 20:58:24 +08:00
return def;
2014-05-29 19:41:38 +08:00
};
2014-09-13 15:58:20 +08:00
this.sendGet = function (url, refer, data, responseType, done, failed, appendatt, headers) {
2014-05-29 19:41:38 +08:00
/// <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>
2014-09-13 15:58:20 +08:00
return that.send("GET", url, refer, data, responseType, done, failed, appendatt, headers);
2014-05-29 19:41:38 +08:00
};
2014-09-13 15:58:20 +08:00
this.sendPost = function (url, refer, data, responseType, done, failed, appendatt, headers) {
2014-08-20 20:58:24 +08:00
var args = [].slice.call(arguments);
args.unshift("POST");
return that.send.apply(this, args);
2014-05-29 19:41:38 +08:00
};
document.addEventListener("ajaxproxyfinished", function (e) {
var data = e.detail;
if (!requestMap[data.index]) return;
var param = requestMap[data.index];
delete requestMap[data.index];
2014-06-12 21:36:05 +08:00
2014-12-02 21:13:25 +08:00
if (data.status === 404 && data.url.indexOf("leftTicket") === -1) {
2014-07-01 20:07:44 +08:00
//404是个比较特殊的错误这个错误一般是证书有问题
2014-12-02 21:13:25 +08:00
//但是切CDN也有可能导致这个问题所以忽略查票请求的这个错误
2014-07-01 20:07:44 +08:00
document.dispatchEvent(new CustomEvent("networkOrCertificationError"));
}
2014-08-21 17:00:33 +08:00
data.success ? param.done.call(data || window, data.model) : param.fail.call(data || window, data.model);
2014-05-29 19:41:38 +08:00
});
2014-06-12 21:36:05 +08:00
Object.defineProperties(this, {
"userAtts": {
get: function () {
2014-07-01 20:07:44 +08:00
return jsonAtt || "";
2014-06-12 21:36:05 +08:00
},
set: function (value) {
jsonAtt = value;
}
}
});
2014-05-29 19:41:38 +08:00
};
WebRequest.prototype = Object.create(EventObject);
WebRequest.constructor = WebRequest;
module.exports = new WebRequest();
});