js,java,ajax实现跨域访问及其原理

http://blog.csdn.net/saytime/article/details/51540876

这篇文章对跨域访问做了较为细致得分析,我这里做下简单总结

1.实现跨域访问原理:

  浏览器由于同源策略不能做跨域访问,但是<script>标签是开放策略能够跨域访问,所以突破口就是通过<script>来实现跨域访问获得其他地方得json数据

  jsonp模式:

    JSONP(JSON with Padding)是JSON的一种”使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的script 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。

2.需要注意得点:

  通过script获得内容只有script标签能识别得数据才不会报错,所以想要通过这种方式获得数据,需要将这个数据封装起来,变成script能够识别得,此时我们可以设置一个回调函数callback,本域有,其他域同样也有,达到将数据弄过来得效果。

3.jquey实现方式

$.ajax({
            url:'http://localhost:8888/other/other.jsp',
            type:'post',
            data:{'params':'fromjsonp'},
            dataType: "jsonp",
            jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
            jsonpCallback:"getResult",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以不写这个参数,jQuery会自动为你处理数据
            success: function(data){
            },
            error: function(){
                alert('fail');
            }
        });

  这里jsonp:通过它能获得对应得回调函数getParms(callback)获得真正回调函数,一般jquey不指定的话也会自动生成一个回调函数

  其他域也许有这个函数使用得到得内容需符合script语法,能被识别

  

原文地址:https://www.cnblogs.com/xiaoping1993/p/8418346.html