123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- /**
- * @Module: xajax.js
- * @Version: 0.6.0
- * @Desc: simple ajax class
- * @Last Update: 2019-01-04
- * @Author: ls
- * @E-Mail: shucx@139.com
- * @Site: http://www.chuangxin1.com
- * Copyright (c) 2007-2018
- * Thanks dojo (http://dojotoolkit.org)
- */
- if (typeof xajax !== 'object') {
- xajax = { version: '0.6.0' };
- }
- (function() {
- 'use strict';
- var _x = xajax,
- _doc = window.document,
- _enc = encodeURIComponent;
- _x.ERR_OK = 0;
- _x.ERR_EXCEPTION = 1;
- _x.ERR_TIMEOUT = 2;
- _x.CONTENT_TYPE_URL = 'application/x-www-form-urlencoded; charset=utf-8';
- _x.CONTENT_TYPE_JSON = 'application/json; charset=utf-8';
- _x.CONTENT_TYPE_XML = 'application/xml; charset=utf-8';
- var _timeout = 0;
- /* Not support IE6 */
- _x.$ = function(selectors) {
- return _doc.querySelector(selectors);
- };
- _x.$$ = function(selectors) {
- return _doc.querySelectorAll(selectors);
- };
- _x.xhrObj = function() {
- var _xhr = null;
- if (window.XMLHttpRequest) { /* FireFox\Opera\Safari\Chrome\IE7+ ... */
- try {
- _xhr = new XMLHttpRequest();
- } catch (ff) {}
- } else if (window.ActiveXObject) { /* <= MSIE6 */
- var xml = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
- for (var i = 0; i < 3; i++) {
- try {
- _xhr = new ActiveXObject(xml[i]);
- break;
- } catch (ie) {}
- }
- }
- return _xhr;
- };
- _x._ioSetArgs = function(args) {
- var ioArgs = { args: args, url: args.url };
- ioArgs.async = (typeof args.async === 'undefined') ? true : false;
- ioArgs.query = args.data || null;
- ioArgs.headers = args.headers || null;
- ioArgs.contentType = args.contentType || null;
- ioArgs.handleAs = args.handleAs || 'text';
- ioArgs.handle = args.handle || function(obj, ioargs) {};
- ioArgs.error = args.error || null;
- ioArgs.timeout = (args.timeout || _timeout) * 1000;
- ioArgs.response = null;
- ioArgs.status = 0;
- ioArgs.err = null;
- ioArgs.errno = _x.ERR_OK;
- return ioArgs;
- };
- _x._ioResponse = function(ioArgs) {
- var obj = null;
- ioArgs.status = ioArgs.xhr.status;
- ioArgs.response = ioArgs.xhr.responseText;
- switch (ioArgs.handleAs) {
- case 'text':
- obj = ioArgs.response;
- break;
- case 'json':
- try {
- obj = eval('(' + ioArgs.response + ')');
- } catch (e) {
- ioArgs.err = e.description;
- ioArgs.errno = _x.ERR_EXCEPTION;
- }
- break;
- case 'xml':
- obj = ioArgs.xhr.responseXML;
- break;
- case 'javascript':
- try {
- obj = eval(ioArgs.response);
- } catch (e) {
- ioArgs.err = e.description;
- ioArgs.errno = _x.ERR_EXCEPTION;
- }
- break;
- default:
- obj = ioArgs.response;
- break;
- }
- return obj;
- };
- _x._ioNotifyStart = function(ioArgs) {
- if (ioArgs.timeout > 0) {
- ioArgs.starttime = (new Date()).getTime();
- ioArgs.objTimeout = setInterval(_x._ioInterval, 50);
- }
- ioArgs.xhr.onreadystatechange = function() {
- if (ioArgs.xhr.readyState === 4) {
- if (ioArgs.timeout > 0) {
- clearInterval(ioArgs.objTimeout);
- }
- ioArgs.handle(_x._ioResponse(ioArgs), ioArgs);
- }
- };
- };
- _x._ioInterval = function() {
- var now = (new Date()).getTime();
- if ((now - _x.ioArgs.starttime) > _x.ioArgs.timeout) {
- _x.cancel();
- _x.ioArgs.err = 'Timeout';
- _x.ioArgs.errno = _x.ERR_TIMEOUT;
- if (_x.ioArgs.error) {
- _x.ioArgs.error(_x.ioArgs);
- }
- }
- };
- _x.xhr = function(method, args, hasBody) {
- var xhr = null,
- ioArgs = _x._ioSetArgs(args);
- xhr = ioArgs.xhr = _x.xhrObj();
- if (xhr === null) {
- return (null);
- }
- _x.ioArgs = ioArgs;
- try {
- xhr.open(method, ioArgs.url, ioArgs.async);
- _x._ioNotifyStart(ioArgs);
- if (args.contentType) {
- xhr.setRequestHeader('Content-Type', args.contentType);
- }
- if (args.headers) {
- for (var hdr in args.headers) {
- xhr.setRequestHeader(hdr, args.headers[hdr]);
- }
- }
- xhr.send(hasBody ? ioArgs.query : null);
- } catch (e) {
- _x.cancel();
- ioArgs.err = e.description;
- ioArgs.errno = _x.ERR_EXCEPTION;
- if (ioArgs.error) {
- ioArgs.error(ioArgs);
- }
- }
- return ioArgs || null;
- };
- _x.cancel = function() {
- if (_x.ioArgs.xhr) {
- if (_x.ioArgs.timeout > 0) {
- clearInterval(_x.ioArgs.objTimeout);
- }
- _x.ioArgs.xhr.abort();
- }
- };
- _x.Get = function(args) {
- return _x.xhr('GET', args, false);
- };
- _x.Head = function(args) {
- return _x.xhr('HEAD', args, false);
- };
- _x.Post = function(args) {
- args.contentType = args.contentType || _x.CONTENT_TYPE_URL;
- return _x.xhr('POST', args, true);
- };
- _x.Put = function(args) {
- args.contentType = args.contentType || _x.CONTENT_TYPE_URL;
- return _x.xhr('PUT', args, true);
- };
- _x.Delete = function(args) {
- args.contentType = args.contentType || _x.CONTENT_TYPE_URL;
- return _x.xhr('DELETE', args, true);
- };
- _x.isArray = function(args) {
- return args && (args instanceof Array || typeof args === 'array');
- };
- _x.isFunction = function(args) {
- return args && (typeof args === 'function');
- };
- _x.setValue = function(obj, key, value) {
- if (value === null) {
- return;
- }
- var val = obj[key];
- if (typeof val === 'string') { // inline'd type check
- obj[key] = [val, value];
- } else if (_x.isArray(val)) {
- val.push(value);
- } else {
- obj[key] = value;
- }
- };
- _x.fieldToObject = function(item) {
- var obj = null;
- if (item) {
- var name = item.name,
- type = (item.type || '').toLowerCase();
- if (name && type && !item.disabled) {
- if (type === 'radio' || type === 'checkbox') {
- if (item.checked) {
- obj = item.value;
- }
- } else if (item.multiple) {
- obj = [];
- var opt = item.options,
- n = opt.length;
- for (var i = 0; i < n; i++) {
- if (opt[i].selected) {
- obj.push(opt.value);
- }
- }
- } else {
- obj = item.value;
- }
- }
- }
- return obj; // Object
- };
- _x.objectToQuery = function(obj) {
- var pairs = [],
- backstop = {};
- for (var key in obj) {
- var value = obj[key];
- if (value !== backstop[key]) {
- var assign = _enc(key) + '=';
- if (_x.isArray(value)) {
- for (var i = 0, n = value.length; i < n; i++) {
- pairs.push(assign + _enc(value[i]));
- }
- } else {
- pairs.push(assign + _enc(value));
- }
- }
- }
- return pairs.join('&'); // String
- };
- _x.formToObject = function(obj) {
- if (!obj) {
- return null;
- }
- var el = obj.elements,
- n = el.length,
- s = {},
- exclude = 'file|submit|image|reset|button|';
- for (var i = 0; i < n; i++) {
- var item = el[i],
- name = item.name,
- type = (item.type || '').toLowerCase();
- if (name && type && exclude.indexOf(type) === -1 && !item.disabled) {
- _x.setValue(s, name, _x.fieldToObject(item));
- }
- }
- return s;
- };
- _x.formToQuery = function(obj) {
- if (!obj) {
- return null;
- }
- return _x.objectToQuery(_x.formToObject(obj));
- };
- })();
|