响尾蛇的gravatar头像
响尾蛇 2015-12-29 16:10:40

ajax解决跨域问题最常见的方法是什么?代理怎么实现?

用的最多的解决ajax跨域问题?

如何设置代理?难道要自己实现代理那部分代码?

所有回答列表(3)
遇见,的gravatar头像
遇见,  LV36 2015年12月29日

jsonp

吢涼ㄋ的gravatar头像
吢涼ㄋ  LV11 2015年12月29日

1、jsonp

2、在被访问的页面加上<meta http-equiv="Access-Control-Allow-Origin" content="*">

3、自己后台通过httpClient获取跨域的值,再传值到前台

moodstreets的gravatar头像
moodstreets 2015年12月30日

解决跨域访问的问题,大体有这么几种方法:
1、document.domain+iframe的设置。
2、动态创建script。
3、利用iframe和location.hash。
4、window.name实现的跨域数据传输。
5、使用HTML5 postMessage。
6、利用flash。
7、通过代理,js访问代理,代理转到不同的域。
8、Jquery JSONP(不能成为真正的Ajax,本质上仍是动态创建script)。
9、跨域资源共享(CORS) 这是HTML5跨域问题的标准解决方案。
​如果你想用代理的模式去实现,那么代理的代码肯定是需要你自己去写的,自从JQuery出了JSONP后这个方法成为了比较主流的实现方法。代码如下:
$.ajax({
   async:false,
   url: 跨域的url,
   type: "GET",
   dataType: 'jsonp',
   jsonp: 'jsoncallback',
   data: 需要传输的数据,
   timeout: 5000,
   beforeSend: function(){
   //jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了
   },
   success: function (json) {//客户端jquery预先定义好的callback函数,成功获取跨域服务器上的json数据后,会动态执行这个callback函数
    
   },
   error: function(xhr){
    //jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了
    //请求出错处理
    alert("请求出错(请检查相关度网络状况.)");
   }
});

其实jsonp的实现原理是动态创建js的封装,你自己也可写方法实现,代码如下:
​<script type="text/javascript" src="" id="getData">
<script type="text/javascript">
      function get(url){

              var obj = document.getElementById("getData");
              obj.src = url;
              if(obj.readStatus == 200) {

                     alert(responseVal)

              }
              get("http://www.baidu.com");

      }
</script>
 

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友