/** * 模拟ajax的 script请求 * @param {[type]} options [description] * @return {[type]} [description] */ function createAjax(options) { if (typeof url === "object") { options = url; url = undefined; } options = options || {}; /** * 参数 * jQuery.ajaxSetup 是默认参数 * @type {[type]} */ var s = jQuery.ajaxSetup({}, options); // Deferreds // 异步机制 var deferred = jQuery.Deferred(); var completeDeferred = jQuery.Callbacks("once memory"); /** * 实际返回的ajax对象 * @type {Object} */ var jqXHR = {} // 把jqXHR对象转化promise对象,幷加入complete、success、error方法 deferred.promise(jqXHR).complete = completeDeferred.add; //别名 jqXHR.success = jqXHR.done; jqXHR.error = jqXHR.fail; // 增加回调队列 // complete: function() { // console.log('局部事件complete') // }, // error: function() { // console.log('局部事件error请求失败时调用此函数') // }, // success: function() { // console.log('局部事件success') // } for (i in { success: 1, error: 1, complete: 1 }) { jqXHR[i](s[i]); } function send(_, complete) { var script = jQuery("<script>").prop({ async: true, charset: s.scriptCharset, src: s.url }).on( "load error", callback = function(evt) { script.remove(); callback = null; if (evt) { complete(evt.type === "error" ? 404 : 200, evt.type); } } ); document.head.appendChild(script[0]); } function done(status, nativeStatusText, responses, headers) { var isSuccess = status >= 200 && status < 300 || status === 304; var success = jqXHR.success; var error = jqXHR.error; if (isSuccess) { deferred.resolveWith(document, [success, jqXHR]); } else { deferred.rejectWith(document, [jqXHR, error]); } } //发送请求 send({ Accept: "text/javascript, application/javascript, application/ecmascri" }, done); return jqXHR; } function show(data){ $('body').append('<li>'+ data +'</li>'); } //执行一个异步的HTTP(Ajax)的请求。 var ajax = createAjax({ url: 'http://code.jquery.com/jquery-latest.js', dataType: 'script', //请求完成后回调函数 (请求success 和 error之后均调用) complete: function() { show('局部事件complete') }, error: function() { show('局部事件error请求失败时调用此函数') }, success: function() { show('局部事件success') } }) ajax.done(function() { show('deferred done') }).fail(function() { show('deferred fail') }).always(function() { show('deferred lways') })
模拟ajax的 script请求
·
转载于:https://www.cnblogs.com/aaronjs/p/4167241.html
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)