首先, 我很清楚 jQuery , zepto 等框架的包装并没有问题. 所以虽然我做得还挺符合 jQuery 规范的, 但其实我做得这个事情并没有实际上的生产意义, 只能用于令人更了解实现侧的过程, 同时对我个人而言算是一种娱乐......
对于我做得项目, 只有很轻小以致于整个项目代码也到不了 jQuery-min.JS 文件大小的情况, 才会使用我自写的这个发起器, 并且不会用源码版, 会用压缩版. 另外我觉得做一个前后端连用的框架, 所有请求都通过 JSONP 的方式, 也许反倒可以简洁一些.
- var _shaneAjaxRef = {
- };
- /**
- * @author Shane Loo Li
- * @version 1.1.0, 2019-7-18 Thursday
- * @param configObj {
- }
- * url
- * type
- * data
- * async
- * dataType xml, html, script, text will return text itself. JSON wil return object. JSONP will run return text as JavaScript.
- * success function
- * error function
- * complete function
- */
- var shaneAjax = function(configObj)
- {
- if (!configObj || !configObj.url) {
- return;
- }
- try
- {
- if (configObj.dataType && configObj.dataType == 'jsonp')
- {
- _shaneAjaxRef.goJsonp(configObj);
- }
- else
- {
- _shaneAjaxRef.goRealAjax(configObj);
- }
- }
- catch (err)
- {
- if (configObj.error)
- {
- configObj.error(xmlhttp, '' + err, err);
- }
- if (configObj.complete)
- {
- configObj.complete(xmlhttp, 'error');
- }
- }
- };
- _shaneAjaxRef.buildNewXmlhttp = function()
- {
- return Windows.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
- }
- _shaneAjaxRef.buildDataStr = function(data)
- {
- if (!data) return '';
- var result = '';
- for (var key in data)
- {
- if (data[key] instanceof Array)
- {
- var values = data[key];
- for (var i = -1; ++i != values.length; )
- {
- if (result) { result += '&'; }
- result += key + '=' + values[i];
- }
- }
- else
- {
- if (result) { result += '&'; }
- result += key + '=' + data[key];
- }
- }
- return result;
- };
- _shaneAjaxRef.goJsonp = function(configObj)
- {
- var i = -1;
- while (++i != 65536 && Windows['jsonp' + i]) { }
- Windows['jsonp' + i] = function(responseDataObj)
- {
- if (configObj.
来源: http://blog.51cto.com/shanelooli/2421287