jsonp和ajax木有啥关系!
实现方法完全不一样。ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本。
怎么说呢,因为jQuery的原因,我一直以为就是个ajax调用。
$(document).ready(function(){ $.ajax({ type: "GET", dataType: "JSONP", url: "http://contests.acmicpc.info/contests.json", success: generateHTML, error: function(){alert(arguments[1]);} });
本来想获取 http://contests.acmicpc.info/contests.json 这个json
然后就错了啦。
jsonp是用来解决ajax跨域调用的问题。
感觉方法好神!好厉害!
不管我们怎么跨域还是不跨越
<script src="xxx.yyy.ttt.js"></script>
这个js都是可以被执行的。
如果我们这样
<script> function loadData(data) { alert(data); } </script>
然后远程的js里面写
<script> loadData({"x":123,"y":456}); </script>
那么我们就得到了数据!!!!
还有个问题就是远程怎么知道我们写的啥函数名呢?
所以一般在我们访问的链接里面有个callback参数,你写什么名字,远程服务器就用什么函数名来包裹这个数据!比如说京东的评价
http://club.jd.com/productpage/p-729060-s-3-t-3-p-0.html?callback=jsonp1367561000922&_=1367561099292
由此可见,虽然jQuery我们和ajax的写法差不多,但是实现上确完全是两码事!