- JSONP
JSONP
我理解的JSONP的方式就是,通过JS代码,动态创建一个Script标签,通过标签的src的网址里面包含一个JSONP属性,后端接收到后返回一个url中jsonp=参数,这样一个参数(包含一个json),通过执行这个参数命名的函数来实现跨域。
以下是JS中的代码
var util = {};/*[function 在页面注入脚本]*/util.createScript = function(url,charset){var script = document.createElement('script');script.setAttribute('type','text/javascript');charset && script.setAttribute('charset',charset);script.async = true;return script;}/*[function jsonp]*/util.jsonp =function(url,onsuccess,onerror,charset){var callbackName = util.getName('tt_player');window[callbackName] = function () {if(onsuccess && util.isFunction(onsuccess)){onsuccess(arguments[0]);}};var script = util.createScript(url + '&callback=' + callbackName,charset);script.onload = script.onreadystatechange = function () {if(!script.readyState || /loaded|complete/.test(script.readyState)){script.onload = script.onreadystatechange = null;//移除该script 的DOM 对象if(script.parentNode){script.parentNode.removeChild(script);}//删除函数或变量window[callbackName] = null;}};script.onerror = function(){if(onerror && util.isFunction(onerror)){onerror();}};document.getElementsByTagName('head')[0].appendChild(script);}
通过它可以创建如下
<script src="http://www.abc.com/?data=name&callback=jsonp" charset="utf-8"></script><script>jsonp({data:{<!-- 全局函数接受回掉信息 -->}})</script>
