加油~ javascript
--WZYhtml
1、什么是javascript跨域问题?前端
域:服务器域名,惟一标识(协议,域名,端口)必须保证一致,说明域相同java
跨域:在一个服务器上,去访问另外一个服务器上,而且获得另外一个服务器返回回来的值,这就是javascript跨域,其实简单点,以前咱们作的ajax,都是在同域中访问,如今只是访问的服务器变成了另外的,不是同一台了。仅此而已。可是这样一变,以前的代码就不能用了。web
2、解决javascript跨域问题ajax
解决该问题,有不少种方式,我百度了一下,好像这就属于前端的范畴了,因此我决定研究一下JSONP的这种解决方案便可,留一篇我百度到的博文,详细讲解了其余的解决方案,仅供参考。json
2.一、javascript跨域处理(JSONP) tomcat
原理图服务器
可能初次看这张图不是很理解,其实很简单,跟着个人思路理清楚便可。
左边tomcat1服务器中有一个页面须要请求右边tomcat2服务器中的GetDataServlet,GetDataServlet就模拟用来返回json数据给tomcat1(跨域),这就是跨域问题。
tomcat1中编写请求目标地址,http://localhost:80/web/getData?callback=showData 后面会解释为何呆callback这个参数。showData这个方法是用来接收返回回来的数据所作的一些处理的方法, 在tomcat2这边,提供数据的GetDataServlet首先获取请求参数,也就是那个回调方法的方法名称。而后生成要发送回去的json数据,最后就是通知tomcat1执行回调方法(为何能够通知?这就是前面带callback这个回调方法名称的参数的做用,由于获取到了tomcat1中的回调方法名称,因此就能够经过该名称去通知tomcat1去执行回调方法。)
因此总的步骤就是4步,按照原理图上得步骤,一步步执行,而后获取到返回数据。注意,若是获取数据的jsonp地址页面不是你本身能控制的,就得按照提供数据的那一方的规定格式来操做了,这里只是模拟一下这个过程。讲解原理。
操做:
<!-- 须要将函数存在 调用以前,从而保存函数存在--> <script type="text/javascript"> function showData(data){ alert(data.success); } </script> <script type="text/javascript" src="http://localhost/web/getData?callback=showData"></script>
提供数据端
这里只是模拟一下这种解决方案,实际开发中遇到问题,采用这种思路便可。
2.二、jQuery跨域处理
2.2.一、使用$.getJSON();
原理图
这里惟一要解释的就是,匿名回调方法的使用。
操做:
<script type="text/javascript"> $.getJSON("http://localhost/web/getData?callback=?",function(data){ alert(data.success) });
提供数据端仍是不变的。
2.2.二、使用$.ajax()也能解决跨域问题。这里不作多陈述,具体能够查看文档进行操做。
3、总结
这一章节图比较多,代码比较少,主要把这个跨域问题讲解清楚了,解决跨域问题还有其余不少种方式,有兴趣能够自行百度。