2014-05-29 19:41:38 +08:00
|
|
|
|
|
|
|
|
|
define(function (require, exports, module) {
|
|
|
|
|
var EventObject = require("../platform/EventObject.js");
|
|
|
|
|
var config = require("../data.js");
|
2015-07-01 16:18:25 +08:00
|
|
|
|
var lastPromptPlatformError = null;
|
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);
|
2015-07-01 16:18:25 +08:00
|
|
|
|
|
|
|
|
|
if (this.headers.indexOf("application/json") !== -1 && this.text.indexOf('"status":false,"httpstatus":200,"messages":["网络繁忙"]') !== -1) {
|
|
|
|
|
//被封
|
|
|
|
|
if (!lastPromptPlatformError || (new Date().getTime() - lastPromptPlatformError) > 1000 * 60 * 5) {
|
|
|
|
|
lastPromptPlatformError = new Date().getTime();
|
|
|
|
|
document.dispatchEvent(new CustomEvent("ipBlockError"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
failed && failed.apply(this, args);
|
|
|
|
|
def.rejectWith(this, args);
|
|
|
|
|
} else {
|
|
|
|
|
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>
|
2015-07-01 16:18:25 +08:00
|
|
|
|
var args = [].slice.call(arguments);
|
|
|
|
|
args.unshift("GET");
|
|
|
|
|
return that.send.apply(this, args);
|
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();
|
|
|
|
|
});
|