Ajax的跨域处理

  1. 什么是跨域
    概念:只要协议、域名、端口有任何一个不同,都被当作是不同的域。而跨域是指从一个域名的网页去请求另一个域名的资源。例如从www.baidu.com页面请求www.bing.com的资源就被视为跨域。而因为浏览器的同源策略,会对跨域请求进行限制于是就有了跨域问题的出现。同源,指的是协议、域名、端口号都必须完全相同

  2. 跨域的处理

    • 方法一:服务器代理
      因为限制只存在于浏览器中,在其他环境下是不存在的,服务器中中自然也不存在,所以只需要在服务器做好请求代理,请求变成同源的自然就不存在问题了。

    • 方法二:jsonp
      虽然浏览器有同源限制,但是有三个标签是不符合这种限制的<img>的src(获取图片),<link>的href(获取css),<script>的src(获取javascript),这是由他们的自身特性所决定的。而jsonp,就是利用了script标签不限制同源的特点来实现的。
      小例子:百度搜索框(边输入边提示)效果 ↓ ↓ ↓
      百度搜索
      布局
      只需要一个ul即可,其他全部通过代码动态添加

      <body>
      <input type="text" id="input" />
      <ul id="list"></ul>
      </body>

      js代码

      function fn(data) {
          var list = document.getElementById('list');
          var html = '';
      
          if (data.s.length) {
              list.style.display = 'block';
              for (var i = 0; i < data.s.length; i++) {
                  html += '<li>' + data.s[i] + '</li>'
              }
              list.innerHTML = html;
          }
      }
      
      window.onload = function () {
      
          var input = document.getElementById('input');
          var list = document.getElementById('list');
      
          input.onkeyup = function () {
              //判断输入框不为空时创建script标签,并把请求的接口文件写入src
              if (this.value != '') {
                  var script = document.createElement('script');
                  script.src = 'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=' + input.value + '&cb=fn';
                  document.body.appendChild(script)
              } else {
                  list.style.display = 'none'
              }
          }
      }

      效果↓ ↓ ↓
      最终效果
      jsonp是一种常用的跨域方式,目前有很多前端的jsonp请求封装,它们通过通过动态创建script标签来实现,我们可以直接调用。jsonp方式兼容所有的浏览器,但是只支持get请求。

    • 方法三:XHR2(了解即可)
      HTML5提供的XMLHttpRequest Level 2已经实现了跨域访问以及其他的一些新功能
      这需要在远程服务器端添加如下代码

      header('Access-Control-Allow-Origin:*'); //*代表可访问的地址,可以设置指定域名
      header('Access-Control-Allow-Methods:POST,GET'); 
      

      这样在客户端使用常规的AJAX代码即可。
      因为IE10以下版本的浏览器都不支持,在最近的几年可能不会大量的使用,或许以后会火起来吧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值