Skip to content

Commit 52d22c9

Browse files
author
James Watts
committed
Migration from SourceForge (2010-01-24)
1 parent 4c3ef4a commit 52d22c9

File tree

1 file changed

+174
-0
lines changed

1 file changed

+174
-0
lines changed

nano.ajax.js

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
/*
2+
* nano Ajax plugin v1.0
3+
* http://nanojs.org/plugins/ajax
4+
*
5+
* Copyright (c) 2008-2015 James Watts
6+
* https://github.com/jameswatts
7+
*
8+
* This is FREE software, licensed under the GPL
9+
* http://www.gnu.org/licenses/gpl.html
10+
*/
11+
12+
if (nano) {
13+
nano.plugin({
14+
load: function _load(url, method, params, headers) {
15+
return nano.ajax[method || 'get'](url || '', params, function() { this.data.node.set(this.response.text); }, null, {node: this}, null, headers);
16+
},
17+
send: function _send(url, method, params, headers) {
18+
return nano.ajax[method || 'post'](url || '', params, function() { this.data.node.set(this.response.text); }, null, {node: this}, null, headers);
19+
}
20+
}, function() {
21+
this.reg({
22+
load: function(val) {
23+
this.load(val);
24+
}
25+
});
26+
this.ajax = {
27+
query: function _query(name) {
28+
var name = name + '=', url = document.URL;
29+
return (url.indexOf(name) !== -1)? url.substring(url.indexOf(name)+name.length).split('&', 2)[0] : null;
30+
},
31+
request: function _request(url, method, async, params, user, password, headers, data) {
32+
var obj = {};
33+
obj.url = url;
34+
obj.params = params || {};
35+
obj.method = (typeof method === 'string')? method : 'post';
36+
obj.async = (nano.isset(async))? true : async;
37+
obj.user = user || '';
38+
obj.password = password || '';
39+
obj.data = data || {};
40+
obj.request = (window.XMLHttpRequest)? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
41+
if (obj.request) {
42+
if (obj.method.toLowerCase() === 'post') {
43+
obj.post = '';
44+
for (var param in obj.params) obj.post += param + '=' + params[param] + '&';
45+
obj.post = obj.post.substring(0, obj.post.length-1);
46+
obj.request.open(obj.method, obj.url, obj.async, obj.user, obj.password);
47+
obj.request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
48+
} else {
49+
url += (url.indexOf('?') === -1)? '?' : '&';
50+
for (var param in obj.params) url += param + '=' + params[param] + '&';
51+
obj.request.open(obj.method, url.substring(0, url.length-1), obj.async, obj.user, obj.password);
52+
}
53+
if (headers) {
54+
for (var header in headers) obj.request.setRequestHeader(header, headers[header]);
55+
}
56+
return obj;
57+
} else {
58+
return false;
59+
}
60+
},
61+
response: function _response(obj, fn, evt) {
62+
evt = evt || {};
63+
obj.request.onprogress = function(e) {
64+
if (typeof evt.progress === 'function') evt.progress.call(obj, e);
65+
};
66+
obj.request.onload = function(e) {
67+
if (typeof evt.load === 'function') evt.load.call(obj, e);
68+
};
69+
obj.request.onerror = function(e) {
70+
if (typeof evt.error === 'function') evt.error.call(obj, e);
71+
};
72+
obj.request.onabort = function(e) {
73+
if (typeof evt.abort === 'function') evt.abort.call(obj, e);
74+
};
75+
obj.request.onmessage = function(msg) {
76+
if (typeof evt.message === 'function') evt.message.call(obj, msg);
77+
};
78+
obj.request.onreadystatechange = function(e) {
79+
if (obj.request.readyState === 4) {
80+
obj.response = {
81+
request: obj.request,
82+
header: function _header(header) {
83+
return this.request.getResponseHeader(header);
84+
},
85+
status: obj.request.status,
86+
text: obj.request.responseText,
87+
xml: obj.request.responseXML,
88+
json: null,
89+
messages: null
90+
};
91+
if (nano.isset(obj.request.getResponseHeader('X-JSON'))) {
92+
try {
93+
eval('obj.response.json = ' + obj.request.getResponseHeader('X-JSON') + ';');
94+
if (nano.type(obj.response.json) !== 'object' && nano.type(obj.response.json) !== 'array') obj.response.json = null;
95+
} catch (e) {
96+
obj.response.json = null;
97+
}
98+
}
99+
if (nano.isset(obj.request.getResponseHeader('X-Messages'))) {
100+
try {
101+
eval('obj.response.messages = ' + obj.request.getResponseHeader('X-Messages') + ';');
102+
if (nano.type(obj.response.messages) === 'array') {
103+
for (var i = 0; i < obj.response.messages.length; i++) {
104+
if (typeof obj.request.message === 'function') obj.request.message.call(obj, obj.response.messages[i]);
105+
}
106+
}
107+
} catch (e) {
108+
obj.response.messages = null;
109+
}
110+
}
111+
if (obj.request.status === 200) {
112+
if (typeof fn === 'function') fn.call(obj);
113+
} else {
114+
if (typeof evt.error === 'function') evt.error.call(obj, e);
115+
}
116+
}
117+
};
118+
obj.request.send((obj.method.toLowerCase() === 'post')? obj.post : null);
119+
return obj;
120+
},
121+
get: function _get(url, params, fn, evt, headers, data) {
122+
return new this.response(new this.request(url || '/', 'get', true, params, null, null, headers, data), fn, evt);
123+
},
124+
post: function _post(url, params, fn, evt, headers, data) {
125+
return new this.response(new this.request(url || '/', 'post', true, params, null, null, headers, data), fn, evt);
126+
},
127+
encode: function _encode(params) {
128+
var query = [];
129+
for (var param in params) query.push(encodeURIComponent(param) + '=' + encodeURIComponent(params[param]));
130+
return query.join('&');
131+
},
132+
decode: function _decode(query) {
133+
query = query.split('&');
134+
var cut = null;
135+
var val = null;
136+
var params = {};
137+
for (var i = 0; i < query.length; i++) {
138+
cut = query[i].indexOf('=');
139+
val = query[i].substring(cut+1);
140+
params[query[i].substring(0, cut)] = (!isNaN(parseFloat(val)) && isFinite(val))? val-0 : ((val == '')? null : val);
141+
}
142+
return params;
143+
},
144+
json: function _json(obj) {
145+
if (typeof obj !== 'object' || obj === null) {
146+
if (typeof obj === 'string') obj = '"' + obj + '"';
147+
return new String(obj);
148+
}
149+
var json = [];
150+
var array = (nano.type(obj) === 'array');
151+
var val = null;
152+
for (var prop in obj) {
153+
val = obj[prop];
154+
if (typeof val === 'string') {
155+
val = '"' + val.replace(/"/, '\"') + '"';
156+
} else if (nano.type(val) === 'object' || nano.type(val) === 'array') {
157+
val = this.serialize(val);
158+
}
159+
json.push(((array)? '' : '"' + prop.replace(/"/, '\"') + '":') + String(val).replace(/"/, '\"'));
160+
}
161+
return ((array)? '[' : '{') + String(json) + ((array)? ']' : '}');
162+
},
163+
parse: function _parse(val) {
164+
if (val === '') return '""';
165+
try {
166+
eval('var obj = ' + val + ';');
167+
} catch (e) {
168+
return null;
169+
}
170+
return obj;
171+
}
172+
};
173+
});
174+
}

0 commit comments

Comments
 (0)