废话不多少 。。我估计一万个人都搞不清楚 什么是跨域 然后就被这堵墙无情的挡住了。。我尝试了很多办法解决这个问题。后来再慕课网上的一个老师的ppt那里看到一张图 我觉得 能记住这张图的话 应该就算是深入浅出的了解了跨域了吧。
解决跨域这个遗留问题现在我所知道 常用的有三种方法这里 挨个复习和记录一下。
1.使用代理解决。
使用代理解决 其实很好理解。打个比方说,我要请求的json地址在我的阿里云上面,然后我现在在使用本地测试。去请求服务器上面的json数据,这不用看肯定就是跨域了。怎么办呢,如果我使用代理的思路来解决问题。它会变成 首先我在本地架设了一个xampp,然后我丢了一个 python脚本在本地,我要请求数据的时候 首先发送这个数据到本地的这个python脚本 这个python脚本在接受并保存了这些参数之后使用 著名的urllib2模块 带上这些参数向远端的服务器发送请求 然后得到服务器返回的数据 然后再由这个脚本 返回给本地的js文件 js再负责实施更新数据。。这样听上去没什么难的地方,但是这么说的话 脚本与脚本之间似乎是一个同步操作,不太清楚 太大的数据会不会很大程度的影响性能。我也没尝试过过大的json包。
2.使用jsonp解决跨域问题
这里按照我的理解来说的话是,灵活运用了<script>标签可以 跨域请求文件数据的一个特点。这是显然的,不然我们使用的各大厂商的CDN是怎么做到的呢。。所以如果我在本地用<script>标签调用服务器端的js文件其实就可以了,然而这个服务器端提供的文件则是服务器封装好的json文件 根据前端的需要动态添加的。 虽然听起来有点绕 不过好消息是jquery的.ajax()方法是默认支持jsonp的方式的。
dateType:‘jsonp‘, //这里随意给jsonp一个值 用来做key jsonp:‘callback‘,
然后后台就可以来获得这个callback name的值了
jsonDate = method.GET[callback]; //这个jsonDate就是数据了 result = jsonDate
而且jsonp 只支持get方法。 而且jsonp 只支持get方法。 而且jsonp 只支持get方法。
3.使用XMLHttpRequest版本2.
这个。。。这个基本不推荐使用 因为大量兼容性的问题。我还在测试中。
这篇文暂时先这样吧。学习到新的 再来修改一下。