zoukankan      html  css  js  c++  java
  • ajax跨域解决方案

    先看看域名组成:     

    http:// www.baidu.com  :80   /abc/123 ?id=12
    【协议】 【地址】 【端口】 【文件】 【参数】


    我们再来看看何时才算跨域:

    当协议或者地址或者端口号不同的时候才算是不同的,而当你在不同的域之间有数据传递的时候,叫做跨域。


    看到这里你还不理解什么叫跨域的话,那就来看看发生跨域的情况

    url 说明 是否跨域

    http://www.baidu.com

    https://www.baidu.com

    不同协议

    http://www.baidu.com

    http://www.163.com

    不同地址

    http://www.baidu.com:80

    http://www.baidu.com:8080

    不同端口

    http://www.baidu.com/a.js

    http://192.168.0.122/a.js

    域名对应的ip地址

    http://www.baidu.com/abc/a.php

    http://www.baidu.com/123/a.php

     同一域名不同文件/文件夹  否

    知道跨域何时发生了,有时业务需要,要用到跨域,这个时候就会有问题了。ajax不是不能跨域吗?那我们就是要想办法使其能跨域!!

    方法1——使用代理:

    这种方式是通过后台(ASP、PHP、JAVA、ASP.NET)获取其他域名下的内容,然后再把获得内容返回到前端,这样因为在同一个域名下,所以就不会出现跨域的问题。

    方法2——JSONP:

    假设在http://www.a.com/index.php这个页面中向http://www.b.com/getinfo.php提交GET请求,那么我们在www.a.com页面中添加如下代码:

    //创建一个script元素
    
    var  Scr = document.reateElement('script');
    
    //声明类型
    
    Scr.type='text/javascript';
    
    //添加src属性,引入跨域访问的url
    
    Scr.src='http://www.b.com/gerinfo.php';
    
    //在页面中添加新创建的script元素
    
    document.getElementsByTagName('head')[0].appendChild(Scr)

    当GET请求从http://www.b.com/getinfo.php返回时,可以返回一段JavaScript代码,这段代码会自动执行,可以用来负责调用http://www.a.com/index.php页面中的一个callback函数。看下面一个列子:

    www.b.com页面中:

    <script>
    
      alert('hello  我是b');
    
    </script>

    注意:JSONP只支持 “GET” 请求,但不支持 “POST” 请求。

    方法3——XHR2

    “XHR2” 全称 “XMLHttpRequest Level2” 是HTML5提供的方法,对跨域访问提供了很好的支持,并且还有一些新的功能。

    * IE10以下的版本都不支持

    * 只需要在服务器端头部加上下面两句代码:

    header( "Access-Control-Allow-Origin:*" );

    header( "Access-Control-Allow-Methods:POST,GET" );

  • 相关阅读:
    BZOJ 1037: [ZJOI2008]生日聚会Party 四维DP
    Codeforces Round #240 (Div. 1) B. Mashmokh and ACM DP
    Codeforces Round #319 (Div. 2)B. Modulo Sum DP
    浅谈移动端页面无刷新跳转问题的解决方案
    2017年10大主流编程语言最新排行榜出炉
    2017年10大主流编程语言最新排行榜出炉
    验证码倒计时的注册页面
    仿百度地图上拉下滑抽屉盒
    仿百度地图上拉下滑抽屉盒
    微信小游戏跳一跳外挂教程(安卓版)
  • 原文地址:https://www.cnblogs.com/jiangnima/p/7506260.html
Copyright © 2011-2022 走看看