加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ajax跨域

发布时间:2020-12-15 21:34:48 所属栏目:百科 来源:网络整理
导读:什么是跨域 简单的理解就是因为javascript同源策略的限制(同源策略: javascript或是cookie 默认只允许访问同域名下的内容),例如 a.com 下不能访问 b.com 下的内容,这就是跨域. 不同域条件 先看看域名的组成: 当 协议 子域名 主域名 端口号 任意一个不相同,就

什么是跨域

简单的理解就是因为javascript同源策略的限制(同源策略: javascript或是cookie 默认只允许访问同域名下的内容),例如a.com下不能访问b.com下的内容,这就是跨域.

不同域条件

先看看域名的组成:

协议 子域名 主域名 端口号任意一个不相同,就算是不同域,

跨域解决

  • jsonp
    jsonp利用的是script标签来实现(毕竟script不存在跨域问题),

只支持GET请求,不支持POST请求
一般在URL中传入一个callback的参数,用来调用函数

function getJSON(url,fn){
// 创建 script标签
    var oScript = document.createElement('script');
    oScript.src = url;
    document.body.appendChild(oScript);
    var reg = /callback=([^&]+)/;
    var fnName = url.match(reg)[1];
// 挂载window
    window[fnName] = fn;   // 函数在服务器端 执行
        oScript.onload = function(){
            document.body.removeChild(oScript);
            delete(window[fnName]);
        }
}

PHP页面:

echo $_GET['callback'].'({"name":"hello"})';

以上就是jsonp方法的主要实现.

毕竟 jsonp不能实现POST请求

  • CORS
    这个方法既可以实现post又可以实现 get请求

但是这个方法IE10以下不支持
基本思想: 使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是 应该失败。
php页面添加一下代码:

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

补充一下

关于对 浏览器检测是否支持 CORS

function createCORS(fn,url){
var xhr = new XMLHttpRequest();
if('withCredentials' in xhr){
    xhr.open(fn,url,true);
}else if(typeof XDomainRequest() != 'undefined'){
    cxhr = new XDomainRequest();
    cxhr.open(fn,url);
   }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读