设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 文件
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

全面分析前端的网络请求方式(7)

发布时间:2019-03-28 17:01 所属栏目:21 来源:ConardLi
导读:服务端设置 Access-Control-Allow-Origin 就可以开启 CORS。 该属性表示哪些域名可以访问资源,如果设置通配符则表示所有网站都可以访问资源。 app.all('*',function(req,res,next){ res.header(Access-Control-All

服务端设置 Access-Control-Allow-Origin 就可以开启 CORS。 该属性表示哪些域名可以访问资源,如果设置通配符则表示所有网站都可以访问资源。 

  1. app.all('*', function (req, res, next) {  
  2.     res.header("Access-Control-Allow-Origin", "*");  
  3.     res.header("Access-Control-Allow-Headers", "X-Requested-With");  
  4.     res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");  
  5.     next();  
  6. });  

jsonp

script标签的src属性中的链接可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。

jquery对jsonp的支持:   

  1. $.ajax({  
  2.          type : "get",  
  3.          url : "http://xxxx"  
  4.          dataType: "jsonp",  
  5.          jsonp:"callback",   
  6.          jsonpCallback: "doo",  
  7.          success : function(data) {  
  8.              console.log(data);  
  9.          }  
  10.      });  

fetch、axios等并没有直接提供对jsonp的支持,如果需要使用这种方式,我们可以尝试进行手动封装: 

  1. (function (window,document) {  
  2.     "use strict";  
  3.     var jsonp = function (url,data,callback) {  
  4.         // 1.将传入的data数据转化为url字符串形式  
  5.         // {id:1,name:'jack'} => id=1&name=jack  
  6.         var dataString = url.indexof('?') == -1? '?': '&';  
  7.         for(var key in data){  
  8.             dataString += key + '=' + data[key] + '&';  
  9.         };  
  10.         // 2 处理url中的回调函数  
  11.         // cbFuncName回调函数的名字 :my_json_cb_名字的前缀 + 随机数(把小数点去掉)  
  12.         var cbFuncName = 'my_json_cb_' + Math.random().toString().replace('.','');  
  13.         dataString += 'callback=' + cbFuncName;  
  14.         // 3.创建一个script标签并插入到页面中  
  15.         var scriptEle = document.createElement('script');  
  16.         scriptEle.src = url + dataString;  
  17.         // 4.挂载回调函数  
  18.         window[cbFuncName] = function (data) {  
  19.             callback(data);  
  20.             // 处理完回调函数的数据之后,删除jsonp的script标签  
  21.             document.body.removeChild(scriptEle);  
  22.         }  
  23.         document.body.appendChild(scriptEle);  
  24.     }  
  25.     window.$jsonpjsonp = jsonp;  
  26. })(window,document)  

postMessage跨域

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读