源地址:http://fund.eastmoney.com/data/funddataforapp.aspx?t=base&f=100025
难道我只能被动的定义【data()】这个函数?我能不能换个自己想要是名字呢?
源文件:data({"json":"I am resource"});
jsonp接口地址:http://fund.eastmoney.com/data/funddataforapp.aspx?t=base&f=100025&cb=aa
jsonp接口数据:aa({"json":"i am resource"});
//ajax方式:
$.ajax({
type:"get",
url:"源地址",
dataType:"jsonp",
jsonp:"cb", //jsonp数据约定接口,也或许是callback等。。。
success:function(jsonData){
console.log(jsonData.json); //i am resource
}
});
//原生方式:
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = http://fund.eastmoney.com/data/funddataforapp.aspx?t=base&f=100025;
document.getElementByTagName('body')[0].appendChild(script); //这就是数据跨域传输的原理
<!-- 原生方式的效果是这样的:-->
<body>
......
<script type="text/javascript" src="http://fund.eastmoney.com/data/funddataforapp.aspx?t=base&f=100025"></script>
</body>
<!-- 或者再清楚一点:-->
<body>
......
<script type="text/javascript">
data( { "json":"i am resource" } ); <!-- 原来json数据是以函数参数的形式传送过来的,现在要做的就是定义data这个函数。-->
<!-- var data = function(jsondata){ console.log(jsondata.json); ==> i am resource } -->
</script>
</body>
难道我只能被动的定义【data()】这个函数?我能不能换个自己想要是名字呢?
对!这就叫做jsonp,一种跨域传输json数据的协议。
协议的内容是这样的:
把你想定义的函数名作为参数在url里传给我【&callback=myfun】,我就会把json数据的包装换成你想要的函数名,然后返回给你。
【myfun】你说了算,但是,【callback】 具体是什么字母得听我的,当然我一般会叫它callback,若是我叫它【cb】你也要遵守。
现在的url变成了这样:【url = url + '&cb=myfun';】
现在需要定义这个【myfun()】函数。
完整版的原生方式就变成了这样:
//完整版原生方式:
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = http://fund.eastmoney.com/data/funddataforapp.aspx?t=base&f=100025&cb=myfun;
document.getElementByTagName('body')[0].appendChild(script);
var myfun = function(jsonData){console.log(jsonData.json);}