Light12306/Web12306/js/platform/webRequest.js
2014-08-21 17:00:33 +08:00

128 lines
3.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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) {
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) {
/// <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);
};
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 || 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();
});