JSONP

JSONP(JSON with Padding 填充式 JSON 或参数式 JSON)
在 js 中,我们虽然不能直接用 XMLHttpRequest 请求不同域上的数据时,但是在页面上引入不同域上的 js 脚 本文件却是可以的,jsonp 正是利用这个特性来实现的。
JSONP 由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数,而数据就是传 入回调函数中的 JSON 数据。

        <script type="text/javascript">
            function dosomethins(jsondata) {
                // 处理获得的json数据
            }
        </script>
        <script src='http://example.com/data.php?callback=dosomthing'></script>
  • 首先第一个script标签定义了一个处理数据的函数;
  • 然后第二个script标签载入了一个js文件,http://example.com/data.php 是数据所在地址,但是因为是当做js来引入的,所以http://example.com/data.php 返回的必须是一个能执行的js文件。
  • 最后js文件载入成功之后,会执行我们在url参数中指定的函数,并且把我们需要json数据作为参数传入,所以php文件如下:
        <?php
        $callback = $_GET('callback');   //得到回调函数名
        $data = array('a', 'b', 'c');  //要返回的数据
        echo $callback.'('.json_encode($data).')';  //输出
        ?>

JSONP的优缺点:
优点:
1.它的兼容性更好,在更加古老的浏览器中都可以运行,不需要 XMLHttpRequest 或 ActiveX 的支持;
2.能够直接访问响应文本,支持在浏览器与服务器之间双向通信
缺点:
1.JSONP 是从其他域中加载代码执行。如果其他域不安全,很可能会在响应中夹带一些恶意代码,而此时除了 完全放弃 JSONP 调用之外,没有办法追究。因此在使用不是你自己运维的 Web 服务时,一定得保证它安全可靠。
2.它只支持 GET 请求而不支持 POST 等其它类型的 HTTP 请求;它只支持跨域 HTTP 请求这种情况,不能解决 不同域的两个页面之间如何进行 JavaScript 调用的问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容