简介
JSONP(JSON with Padding)
是JSON
的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com
的网页无法与不是 server1.example.com
的服务器沟通,而 HTML
的<script>
元素是一个例外。利用 <script>
元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON
资料,而这种使用模式就是所谓的 JSONP
。用 JSONP
抓到的资料并不是 JSON
,而是任意的JavaScript
,用 JavaScript
直译器执行而不是用 JSON 解析器
解析。
要注意JSONP
只支持GET
请求,不支持POST
请求。
跨域
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript
施加的安全限制。
解决不能跨域的方法:
1)JSONP
浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。
2) 代理
例如www.123.com/index.html需要调用www.456.com/server.php,可以写一个接口www.123.com/server.php,由这个接口在后端去调用www.456.com/server.php并拿到返回值,然后再返回给index.html,这就是一个代理的模式。相当于绕过了浏览器端,自然就不存在跨域问题。
3)请求时候,添加Header
比如php:
在php接口脚本中加入以下两句即可:
header('Access-Control-Allow-Origin:*');//允许所有来源访问
header('Access-Control-Allow-Method:POST,GET');//允许访问的方式