jQuery 扩展新函数,增强ajax、post等方法

实现$.ajax$.post的拦截器方法来统一操作一些加解密逻辑

  • 重写$.ajax$.post
  • 扩展新函数$.ajaxEx$.postEx

明显这里扩展新函数更加合理。$.get$.load等扩展也是一样

扩展新函数$.ajaxEx$.postEx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
!(function ($, json, Ts) {
// 构建 AES 密钥
var aesKey = Ts.AES.randomKey();
// 使用 RSA 公钥加密 AES 密钥
var ak = Ts.RSA.encrypt(publicExponent, modulus, aesKey);

// 为 jQuery 添加新函数
$.extend({
ajaxEx: function (url, options) {
// If url is an object, simulate pre-1.5 signature
if ( typeof url === "object" ) {
options = url;
url = undefined;
}

// Force options to be an object
options = options || {};

var data = options['data'];
if(typeof data === 'string') {
throw new Error('opt.data parameter can not be a string!');
}
// Force options to be an object
data = data || {};
data['timestamp'] = new Date().getTime();

// 使用 AES 加密数据
var enc = Ts.AES.encrypt(aesKey, json.stringify(data));

var fn = {
success: null,
complete: null
};
if (options.success) {
fn.success = options.success;
}
if (options.complete) {
fn.complete = options.complete;
}

var opts = {};
opts['data'] = {};
opts['data']['ak'] = ak;
opts['data']['encrypt'] = enc;

if (fn.success !== null) {
opts['success'] = function (data, ts, xhr) {
console.log('success ---> data: %o', data);
console.log('success ---> ts: %o', ts);
console.log('success ---> xhr: %o', xhr);
var _xhr = $.extend({}, xhr);
// 使用 RSA 解密 AES 密钥,再使用解密出来的密钥解密数据
var dec = Ts.AES.decrypt(Ts.AES.getKey(), data['key']);
data = eval('(' + dec + ')');
_xhr['responseText'] = dec;
fn.success(data, ts, _xhr);
};
}

if (fn.complete !== null) {
opts['complete'] = function (xhr, ts) {
console.log('complete ---> xhr: %o', xhr);
console.log('complete ---> ts: %o', ts);
var _xhr = $.extend({}, xhr);
var data = eval('(' + _xhr.responseText + ')');
// 使用 RSA 解密 AES 密钥,再使用解密出来的密钥解密数据
_xhr['responseText'] = Ts.AES.decrypt(Ts.AES.getKey(), data['key']);
fn.complete(_xhr, ts);
};
}

var _opt = $.extend(options, opts);
return $.ajax(url, _opt);
},
postEx: function (url, data, callback, type) {
// Shift arguments if data argument was omitted
if (typeof data === 'function') {
type = type || callback;
callback = data;
data = undefined;
}

if(typeof data === 'string') {
throw new Error('opt.data parameter can not be a string!');
}
// Force options to be an object
data = data || {};
data['timestamp'] = new Date().getTime();

// 使用 AES 加密数据
var enc = Ts.AES.encrypt(aesKey, json.stringify(data));

var fn = {
callback: null
};
fn.callback = callback;

var _data = {};
_data['ak'] = ak;
_data['encrypt'] = enc;

if (fn.callback !== null) {
callback = function (data, ts, xhr) {
console.log('post success ---> data: %o', data);
console.log('post success ---> ts: %o', ts);
console.log('post success ---> xhr: %o', xhr);
var _xhr = $.extend({}, xhr);
// 使用 RSA 解密 AES 密钥,再使用解密出来的密钥解密数据
var dec = Ts.AES.decrypt(Ts.AES.getKey(), data['key']);
data = eval('(' + dec + ')');
_xhr['responseText'] = dec;
fn.callback(data, ts, _xhr);
};
}
return $.post(url, _data, callback, type);
}
});
})(jQuery, JSON, Tisson);

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// 使用方式,入参和 $.ajax 一模一样
$.ajaxEx({
url: 'balRela.do?action=getJsonBalRela',
type: 'post',
dataType: 'json',
data: {
'id': '244541798',
'b': '18000000000',
'c': '755',
'thisMonth': '',
'isyff': 'N'
},
success: function (data, ts, xhr) {
console.log('成功 ---> data: %o', data);
console.log('成功 ---> ts: %o', ts);
console.log('成功 ---> xhr: %o', xhr);
},
complete: function (xhr, ts) {
console.log('完成 ---> xhr: %o', xhr);
console.log('完成 ---> ts: %o', ts);
}
});

// 使用方式,入参和 $.post 一模一样
$.postEx('balRela.do?action=getJsonBalRela',
{
'id': '244541798',
'b': '18000000000',
'c': '755',
'thisMonth': '',
'isyff': 'N'
},
function (data, ts, xhr) {
console.log('post ---> data: %o', data);
console.log('post ---> ts: %o', ts);
console.log('post ---> xhr: %o', xhr);
},
'json');

$.postEx('balRela.do?action=getJsonBalRela',
function (data, ts, xhr) {
console.log('post ---> data: %o', data);
console.log('post ---> ts: %o', ts);
console.log('post ---> xhr: %o', xhr);
}, 'json');

$.postEx('balRela.do?action=getJsonBalRela',
function (data, ts, xhr) {
console.log('post ---> data: %o', data);
console.log('post ---> ts: %o', ts);
console.log('post ---> xhr: %o', xhr);
});
  • 本文作者: forever杨
  • 本文链接: https://blog.yl-online.top/posts/66aefafa.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。如果文章内容对你有用,请记录到你的笔记中。本博客站点随时会停止服务,请不要收藏、转载!