为什么会出现跨域问题?
协议头、域名、端口有一个不一样就叫跨域,浏览器出于安全考虑,不允许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>点击获取数据之后,控制台就会打印以下数据,成功解决了跨域问题

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