首页 > 代码库 > 基于原生JS的jsonp方法的实现
基于原生JS的jsonp方法的实现
基于原生JS的jsonp方法的实现
jsonp,相信大家并不陌生,是在js异步请求中解决跨域的方法之一,原理很简单,有不清楚的同学可以google下,这里就补详细解释了。在Jquery库中,jQuery直接封装有jsonp的方法,很简便,只需在ajax请求的参数中加入datatype:jsonp,jsonp:jsonpcallback即可,这里写下用原生js实现jsonp的源码。
load= function (url, cfg, success) { var op = Object.prototype.toString; var head = doc.getElementsByTagName(‘head‘)[0] || doc.head || doc.documentElement; if (op.call(cfg) === ‘[object Function]‘) { success = cfg; cfg = {}; } var type = cfg.type || ‘script‘, jsonpCallback = cfg.jsonpCallback || ‘fn‘; jsonp = type == ‘jsonp‘ ? (cfg.callbackName || ‘callback‘) : ‘‘, data = http://www.mamicode.com/cfg.data || ‘‘, dataToParam = function (data) { var ret = [], key, e = encodeURIComponent; for (key in data) { ret.push(key + ‘=‘ + e(data[key])) } return ret.join(‘&‘); }, url = url + (/\?/.test(url) ? ‘&‘ : (jsonp || data) ? ‘?‘ : ‘‘) + (jsonp ? (jsonp + ‘=‘ + jsonpCallback) : ‘‘) + (data ? ‘&‘ + dataToParam(data) : ‘‘); loadScript = function (url, callback) { var script = doc.createElement("script"); script.type = "text/javascript"; script.charset = "utf-8"; if (script.readyState) { //IE script.onreadystatechange = function () { if (/loaded|complete/i.test(script.readyState)) { script.onreadystatechange = null; callback && callback.call(this); } }; } else { //Others script.onload = function () { callback && callback.call(this); }; } script.src = http://www.mamicode.com/url;>.insertBefore(script, head.firstChild); }, removeScript = function () { var arg = arguments, script = arg[0], jsonpCallback = arg[1], type = Object.prototype.toString; //移除脚本 if (script && /script/i.test(script.tagName)) { script.parentNode.removeChild(script); } //移除回调 if (jsonpCallback && type.call(jsonpCallback) === ‘[object String]‘) { window[jsonpCallback] = null; } success(); }; var callback = window[jsonpCallback] = success; loadScript(url, function () { removeScript(this, jsonpCallback); }); }
调用方法:load(url,{"type":"script":"data":{}},calback);,原理和方法都很简单,但是jsonp方法只适合于GET方法儿不适合POST方法,这个还是需要注意的。
收藏了
http://lidongbest5.com/blog/20/
基于原生JS的jsonp方法的实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。