非常适合新手的jq/zepto源码分析08---ajax的封装
2017-03-15 09:51
453 查看
1.现在看看对JSONP的封装
get / post / getJson 在 ajax的基础上封装了再次封装了。
zepto基本差不多完成了,
看了之后,不难发现,zepto也就有几大模块: 选择器 , 一些js原生方法的封装 , 事件模型模块 , 再就是 ajax 的封装 。
代码仅供参考,具体功能可以自己扩展。
http://www.cnblogs.com/jiebba/p/6529854.html
http://www.cnblogs.com/jiebba 我的博客,来看吧!
如果有错误,请留言修改下 哦!
$.ajaxJSONP = function(options, deferred){ if (!('type' in options)) return $.ajax(options) //不存在type 直接调用$.ajax var _callbackName = options.jsonpCallback, //回调函数名称 callbackName = ($.isFunction(_callbackName) ? _callbackName() : _callbackName) || ('Zepto' + (jsonpID++)), script = document.createElement('script'), //创建一个script标签 originalCallback = window[callbackName], responseData, //绑定一个错误函数 abort = function(errorType) { //触发script的 error 时间 $(script).triggerHandler('error', errorType || 'abort') }, xhr = { abort: abort }, abortTimeout if (deferred) deferred.promise(xhr) $(script).on('load error', function(e, errorType){ clearTimeout(abortTimeout) $(script).off().remove() //删除所有事件,并移除 if (e.type == 'error' || !responseData) { ajaxError(null, errorType || 'error', xhr, options, deferred) //报错 } else { //传入参数执行函数 ajaxSuccess(responseData[0], xhr, options, deferred) //成功 } window[callbackName] = originalCallback if (responseData && $.isFunction(originalCallback)) originalCallback(responseData[0]) //清除字段 originalCallback = responseData = undefined }) //执行开始函数,返回false 则停止 if (ajaxBeforeSend(xhr, options) === false) { abort('abort') return xhr } window[callbackName] = function(){ //回调函数,这个函数会在后端执行,并传入数据,我们传递给responseDate字段,然后就会去执行 script 加载完成 responseData = arguments } //设置请求的地址并且加上回调函数名称 script.src = options.url.replace(/\?(.+)=\?/, '?$1=' + callbackName) document.head.appendChild(script) //设置超时处理 if (options.timeout > 0) abortTimeout = setTimeout(function(){ abort('timeout') }, options.timeout) return xhr }
function parseArguments(url, data, success, dataType) { if ($.isFunction(data)) dataType = success, success = data, data = undefined if (!$.isFunction(success)) dataType = success, success = undefined return { url: url , data: data , success: success , dataType: dataType } } $.get = function(/* url, data, success, dataType */){ return $.ajax(parseArguments.apply(null, arguments)) } $.post = function(/* url, data, success, dataType */){ var options = parseArguments.apply(null, arguments) options.type = 'POST' return $.ajax(options) } $.getJSON = function(/* url, data, success */)
get / post / getJson 在 ajax的基础上封装了再次封装了。
zepto基本差不多完成了,
看了之后,不难发现,zepto也就有几大模块: 选择器 , 一些js原生方法的封装 , 事件模型模块 , 再就是 ajax 的封装 。
代码仅供参考,具体功能可以自己扩展。
http://www.cnblogs.com/jiebba/p/6529854.html
http://www.cnblogs.com/jiebba 我的博客,来看吧!
如果有错误,请留言修改下 哦!
相关文章推荐
- 非常适合新手的jq/zepto源码分析07---ajax的封装
- 非常适合新手的jq/zepto源码分析04
- 非常适合新手的jq/zepto源码分析05
- 非常适合新手的jq/zepto源码分析02
- 非常适合新手的jq/zepto源码分析01
- 非常适合新手的jq/zepto源码分析06 -- 事件模型
- 非常适合新手的jq/zepto源码分析03
- zepto源码研究 - ajax.js($.ajaxJSONP 的分析)
- Zepto源码分析-ajax模块
- 前后端交互之封装Ajax+SpringMVC源码分析
- asp.net 非常简易的新闻发布系统,结合了ajax,json,Nvelocity模板引擎,只完成了一部分功能,非常适合新手看,我以前是学java方向的,刚接触.net,做的不好的别喷哈
- 一个普通的 Zepto 源码分析(二) - ajax 模块
- c语言写的推箱子源码,非常适合新手学习
- zepto源码研究 - ajax.js($.ajax具体流程分析)
- zepto源码研究 - ajax.js(请求过程中的各个事件分析)
- 个人的web开发心得(九)----------非常适合入门新手,都是常识
- jquery的小小尝试(自动更新时间)(简单,有源码,适合新手)
- 高效率编辑器 VIM-操作篇(非常适合 VIM 新手)
- 第二人生的源码分析(六十一)LLCurl类实现libcurl库封装
- 非常适合第一次接触Web Service的新手