JSONP跨域请求

跨域请求

浏览器默认开启同源策略,请求方与被请求方若存在 协议、域名、端口 任一方面的不同,则请求不被允许

    报错: XMLHttpRequest cannot load xxxxxxx is not allowed by Access-Control-Allow-Origin.

如何实现跨域请求?

  • 浏览器中以下标签不会被同源策略限制
    <img src="请求链接">
    <link herf="请求链接"></link>
    <script src="请求链接"></script>

为求语义化,一般使用 <script> 标签发送跨域请求

  • 获得响应内容的原理
    • script 请求到的内容会作为JS代码直接执行
    • 只要规定响应内容的格式,即可在 JS 代码中操作响应数据
    • 我们把规范后的响应内容称为 JSONP(JSON with padding)

简单实例

http://localhost/index.htmlhttp://127.0.0.1/data.php 发送请求

  • 请求方:index.html
    <script>
        function callback(res){
            console.log(res);
        }
    </script>
    <script src="http://127.0.0.1/data.php"></script>
  • 响应方:data.php
    <?php
        $str = '{"name" : "hello word!"}';
        $jsonp = "callback($str)";
        echo $jsonp;
    ?>
  • 响应数据:

应用

一般将此方法封装成工具函数,配合后端接口文档使用

  • (url, data, callback_name) 等信息作为参数生成请求 url
  • 动态生成对应 script 标签发送请求,并及时动态删除 script 标签
  • 在 callback 函数中接收响应数据
posted @ 2020-03-30 19:36  JING7  阅读(146)  评论(0编辑  收藏  举报