作家
登录

ajax跨域,这应该是最全的解决方案了

作者: 来源: 2017-12-20 09:06:35 阅读 我要评论

  • 常见于.net后台(在IIS和项目标webconfig中同时设置Origin:*)
  • 解决筹划(一一对应):

    • 建议删除代码中手动添加的*,只用项目设备中的即可
    • 建议删除IIS下的设备*,只用项目设备中的即可

    解决筹划: 后端封闭对应的安然设备

    若何解决ajax跨域

    一般ajax跨域解决就是经由过程JSONP解决或者CORS解决,如以下:(留意,如今已经几乎不会再应用JSONP了,所以JSONP懂得下即可)

    jsonp解决跨域问题是一个比较古老的筹划(实际中不推荐应用),这里做简单介绍(实际项目中如不雅要应用JSONP,一般会应用JQ等对JSONP进行了封装的类库来进行ajax请求)

    JSONP之所以可以或许用来解决跨域筹划,主如果因为 <script> 脚本拥有跨域才能,而JSONP恰是应用这一点来实现。具体道理如图

    实现道理

    跨域是一个老生常谈的话题,网上也有大年夜量跨域的材料,并且有不少精品(比如阮一峰前辈的),然则身为一个前端人员不该该浅尝而止,故而才有了本文。

    JSONP的实现步调大年夜致如下(参考潦攀来源中的文┞仿)

    • 客户端网页网页经由过程添加一个<script>元素,向办事器请求JSON数据,这种做法不受同源政策限制   
    1. function addScriptTag(src) { 
    2.   var script = document.createElement('script'); 
    3.   script.setAttribute("type","text/javascript"); 
    4.   script.src = src; 
    5.   document.body.appendChild(script); 
    6.  
    7. window.onload = function () { 
    8.   addScriptTag('http://example.com/ip?callback=foo'); 
    9.  
    10. function foo(data) { 
    11.   console.log('response data: ' + JSON.stringify(data)); 
    12. };        

    请求时,接口地址是作为构建出的脚本标签的src的,如许,当脚本标签构建出来时,最终的src是接口返回的内容

    • 办事端对应的接口在返回参数外面添加函数担保层
    1. foo({ 
    2.  
    3.   "test""testData" 
    4.  
    5. });              
    • 因为<script>元素请求的脚本,直接作为代码运行。这时,只要浏览器定义了foo函数,该函数就会急速调用。作为参数的JSON数据被视为JavaScript对象,而不是字符串,是以避免了应用JSON.parse的步调。

    留意,一般的JSONP接口和通俗接口返回数据是有区其余,所以接口如不雅要做JSONO兼容,须要进行断定是否有对应callback关键字参数,如不雅有则是JSONP请求,返回JSONP数据,不然返回通俗数据

    应用留意

    基于JSONP的实现道理,所以JSONP只能是“GET”请求,不克不及进行较为复杂的POST和其它请求,所以碰到那种情况,就得参考下面的CORS解决跨域了(所以如今它也根本被镌汰了)

    CORS解决跨域问题

    CORS的道理上文中已经介绍了,这里重要介绍的是,实际项目中,后端应当若何设备以解决问题(因为大年夜量项目实践都是由后端进行解决的),这里整顿了一些常见的后端解决筹划:

    PHP后台设备

    PHP后台得设备几乎是所有后台中最为简单的,遵守如下步调即可:

    • 第一步:设备Php 后台许可跨域
    1. <?php 
    2.  
    3. header('Access-Control-Allow-Origin: *'); 
    4.  
    5. header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept'); 
    6.  
    7. //重要为跨域CORS设备的两大年夜根本信息,Origin和headers 
    • 第二步:设备Apache web办事器跨域(httpd.conf中)

    原始代码

    1. <Directory /> 

        推荐阅读

        软件系统管控难题已破 CAST智能分析平台引入中国

      【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞? 【51CTO.com原创稿件】CISQ董事长兼首席履行官Bill Curtis博士也指出,他曾几回来到中国,致力于推动国际代>>>详细阅读


      本文标题:ajax跨域,这应该是最全的解决方案了

      地址:http://www.17bianji.com/lsqh/39951.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)