jsonp解决跨域问题的理解

134 阅读1分钟

为什么会出现跨域问题?

协议头、域名、端口有一个不一样就叫跨域,浏览器出于安全考虑,不允许ajax访问跨域资源。

jsonp解决跨域问题的原理

利用script标签的src属性发送请求,并且在请求地址的后面添加一个callback的参数,并且参数的值是一个函数名(这个函数需事先定义), 当服务端响应完成会把响应体当成js代码执行,就会调用之前定义好的函数。以下是jsopn方案的推导:

  • 利用script标签导入JS文件,会把JS文件里的代码当JS代码执行,这个相信大家不会有什么疑问
  • 利用script标签导入其他类型的文件123.txt文件,此时控制台输出 `我是123.txt文件`,因此,这和类型无关,会把文件的内容统一当js代码执行


  • script导入文件其实相当于对它发起一个请求,其实本质上它是把响应体当JS代码执行



Demo

<body>    <input type="button" value="获取数据" id="btn1"></body><script>    // 定义getData函数    function getData(obj) {        console.log(obj);    }    document.getElementById('btn1').onclick = function () {
        //自己用JS代码创建一个script标签        var spt = document.createElement('script');
      // 后面接上callback参数,参数的值为之前定义好的getData函数,服务端响应之后会把响应体返回并当成js代码执行        spt.src = "http://api.douban.com/v2/movie/top250?callback=getData"; 
        //把script添加到加到页面上        document.head.append(spt);    }    </script>

点击获取数据之后,控制台就会打印以下数据,成功解决了跨域问题


以上仅是个人理解,希望对读者有所帮助,如有不当之处,欢迎大家批评指正