jsonp与ajax

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的写法差不多,但是实现上确完全是两码事!

by 1957
原文地址:https://www.cnblogs.com/x1957/p/3056721.html