开发中遇到的问题,ajax请求非同源地址,浏览器报跨域错误,这是浏览器的安全策略,防止有人用嵌入脚本获取非同源的文档,窃取用户信息。
什么叫javaScript同源策略?参考这篇文章 同源策略
既然是浏览器限制住了ajax调用,那可以请求同源地址服务器,代理请求目标服务器,达到我们ajax访问非同源的目的。
当然,除了上述方法,还可以利用jsonp协议。
jsonp协议是聪明的开发者想出来的hack技术,跟json关系不大,原因下面再说。
首先要讲,浏览器只是限制了js访问非同源,但像<script>、<img>的src属性里的链接地址是不做限制,也就是说,通过这些标签可以实现与远程服务端交互。到这一步,越过了浏览器的安全策略,获取到了服务端的数据。jsonp是双方协商好的交互方式。
做两件事:
客户端
添加一个带有目标地址和参数的script标签、定义一个和参数同名的方法 ,这是一个回调方法,可以在方法里做做数据解析。
服务端
根据客户端传递的参数,写入同名方法调用和json数据,返回给客户端加载执行。 其它数据格式也OK,json比较简洁而且对js支持,所以就采用这个格式。
如果还不理解的话,举个饭堂打饭例子:你去饭堂打饭菜,你吩咐阿姨把饭菜打在盒子里(回调方法),回头你接到盒子马上打开就能拿到饭了(数据)。