-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
115 lines (66 loc) · 2.43 KB
/
index.js
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
/**
* ajax-form.js v0.1.4
* author: Yoshiya Hinosawa ( http://github.com/kt3k )
* license: MIT
*/
(function ($) {
'use strict';
var initAjaxFormSingle = function (form) {
var ATTR_INITIALIZED = 'data-ajax-form-initialized';
var ATTR_API = 'data-api';
var ATTR_METHOD = 'data-method';
var initialized = $(form).attr(ATTR_INITIALIZED);
if (initialized) {
return;
}
// mark init done
$(form).attr(ATTR_INITIALIZED, 'on');
var initButton = function () {
$('button', form).each(function () {
var $btn = $(this);
var api = $btn.attr(ATTR_API);
var method = $btn.attr(ATTR_METHOD) || 'get';
if (!api) {
$btn.addClass('disabled');
throw new Error('api is not specified: ' + api);
}
if (!/^(post|get|put|delete)$/.test(method)) {
$btn.addClass('disabled');
throw new Error('method is invalid: ' + method);
}
var bindEvent = function () {
$btn.one('click', function () {
var paramList = $(form).serializeArray();
var params = {};
paramList.forEach(function (param) {
params[param.name] = param.value;
});
var options = {
timeout: 1e10,
retries: 1
};
qwest[method](api, params, options).then(function (res) {
$btn.trigger('success.ajax-form', res);
}).catch(function (e) {
$btn.trigger('failure.ajax-form', e);
console.log(e);
console.log(e.stack);
}).then(bindEvent);
});
};
bindEvent();
});
};
// init the button
initButton();
};
var initAjaxForms = function () {
$('.ajax-form').each(function () {
initAjaxFormSingle(this);
});
};
$(document).on('init.ajax-form', initAjaxForms);
$(function () {
$(document).trigger('init.ajax-form');
});
}(jQuery));