使用JS怎样实现最简单的跨域

这次给大家带来使用JS怎样实现最简单的跨域,使用JS实现最简单的跨域注意事项有哪些,下面就是实战案例,一起来看一下。

有一天有人跑来跟我定方案,问我cors是什么原理,一脸懵逼,跨域我只知道jsonP啊,眼看一个装逼的机会就要失去了。
“我现在有点忙,待会找你”。
机智的我马上回到工位,百度百度百度。

同源策略

老生常谈了,不是我家的人,东西当然不能让你随便乱动。
非同源的脚本不能访问或者操作其他域的页面对象(如DOM等),同源策略要求三同, 即: 同域, 同协议, 同端口。

跨域方法

本文只介绍jsonP和cors。

jsonP

登录后复制

这是vue文档中引入vue.js的方法,可以看到script标签可以直接去请求其他域的JS文件。既然这样,我们就能使用这个特性来实现跨域。

搭个简单服务器

用nodejs+express搭个简单服务器。几行代码足矣。

const express = require('express');const app = express();app.get('/user',(req,res)=>{  console.log('user');  res.send(‘success’);})app.listen(3000,()=>{  console.log('start');});

登录后复制

启动服务器。然后写个测试函数,先试试ajax。

function getUserAjax(){  let xhr= new XMLHttpRequest();  xhr.open("GET","http://127.0.0.1:3000/user",true);  xhr.send();}

登录后复制

在chrome控制台下运行getUserAjax函数。

使用JS怎样实现最简单的跨域

可以看到被拒绝了,浏览器没有成功拿到success。这个时候就需要用到jsonP了。因为script标签本身就是可以跨域请求JS文件的。

function getUser(){  let dom = document.createElement('script');  dom.src = "http://127.0.0.1:3000/user";  document.body.appendChild(dom);}

登录后复制

控制台下运行getUser()。

使用JS怎样实现最简单的跨域

success没有定义。可见浏览器已经跨域获取到了‘success’。因为script标签加载的JS会立刻执行,而success没有被定义,所以报了这个错。这个时候已经很明了了。前端发请求时将函数名,例如callback传给后台,后台再返回这个函数,callback(info)。这样浏览器接受到数据后,会马上执行callback函数,就像回调函数一样。马上开始改装:
前端代码:

function callback(info){  alert(info);}function getUser(){  let dom = document.createElement('script');  dom.src = "http://127.0.0.1:3000/user?callback=callback";  //url上指明回调函数的名字  document.body.appendChild(dom);}

登录后复制

后台代码:

const express = require('express');const app = express();app.get('/user',(req,res)=>{  let func = req.query.callback;  res.send(func+'(' + '"success"'+')');});app.listen(3000,()=>{  console.log('start');});

登录后复制

再次执行getUser();成功弹出了success。这就是jsonP的原理。后台返回一个JS函数,带上参数,调用前端准备好的函数。即实现了发请求和回调函数的效果。

cors

这个就更简单了。上面ajax跨域的时候报了这个错误 No ‘Access-Control-Allow-Origin’ header is present on the requested resource。
那服务器返回的时候带上‘’Access-Control-Allow-Origin’ 就好了。他的意思是允许哪些源的请求。你虽然不是我家的人,但这次我信任你,给你个钥匙。
改装下后台代码:

const express = require('express');const app = express();app.get('/user',(req,res)=>{  res.header("Access-Control-Allow-Origin", "*");  //设置返回数据的头,代表接受任意源的请求  res.send('success');});app.listen(3000,()=>{  console.log('start');});

登录后复制

再在控制台调用上文的getUserAjax()。成功。前端都不用改代码。不过要注意的是cors不是所有的浏览器都会支持。

使用JS怎样实现最简单的跨域

jsonP和cors比较

cors与jsonP的使用目的相同,但是比jsonP更强大。
jsonP只支持GET请求,cors支持所有类型的HTTP请求。jsonP的优势在于支持老式浏览器,以及可以向不支持cors的网站请求数据。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

js基础提升学习之基本数据类型

怎样利用JS自定义哈希表和顺序列表

以上就是使用JS怎样实现最简单的跨域的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2749945.html

(0)
上一篇 2025年3月8日 05:28:16
下一篇 2025年3月8日 05:28:23

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 怎样使用Vuejs自定义路由

    这次给大家带来怎样使用vuejs自定义路由,使用vuejs自定义路由的注意事项有哪些,下面就是实战案例,一起来看一下。 我们知道组件可以通过 template 来指定模板,对于单文件组件,可以通过 template 标签指定模板,除此之外,…

    编程技术 2025年3月8日
    200
  • js项目中常用算法

    这次给大家带来js项目中常用算法,js项目中使用算法的注意事项有哪些,下面就是实战案例,一起来看一下。 数组去重 var arr = [1,2,3,4,4,2,2,6,9,1,0];var newArr = [];var onOff = t…

    编程技术 2025年3月8日
    200
  • mockjs怎样实现随机生成数据

    这次给大家带来mockjs怎样实现随机生成数据,mockjs实现随机生成数据的注意事项有哪些,下面就是实战案例,一起来看一下。 npm install mockjs var Mock = require(‘mockjs’)var data …

    编程技术 2025年3月8日
    200
  • 如何使用element-ui表格实现单元格可编辑

    下面我就为大家分享一篇element-ui 表格实现单元格可编辑的示例,具有很好的参考价值,希望对大家有所帮助。 如下所示:       {{ scope.row.name }}              export default{ d…

    编程技术 2025年3月8日
    200
  • JS+console[”]10种输出方法(附代码)

    这次给大家带来JS+console[”]10种输出方法(附代码),使用JS+console[”]10种输出方法的注意事项有哪些,下面就是实战案例,一起来看一下。 1、console.log是最常用的输入方法,正常化输…

    2025年3月8日 编程技术
    200
  • r.js怎样操作css文件

    这次给大家带来r.js怎样操作css文件,r.js操作css文件的注意事项有哪些,下面就是实战案例,一起来看一下。   main.css是合并的主文件,或称配置文件。要合并的文件使用@import引入。如下 main.css @import…

    2025年3月8日
    200
  • vue中dialog弹框如何实现

    下面我就为大家分享一篇vue中简单弹框dialog的实现方法,具有很好的参考价值,希望对大家有所帮助。 效果如下,dialog中内容自行添加            x   empty       登录后复制 接收父组件传参isShow,并返…

    2025年3月8日
    200
  • JS链式调用(附代码)

    这次给大家带来JS链式调用(附代码),使用JS链式调用的注意事项有哪些,下面就是实战案例,一起来看一下。 写过jquery的可能都知道,jquery里面可以很方便的使用以下代码: // 不使用链式调用const element = $(el…

    编程技术 2025年3月8日
    200
  • 在javaScript中如何熟练使用字符串工具类StringUtils

    这篇文章主要为大家详细介绍了javascript字符串工具类stringutils,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了javaScript字符串工具类的具体代码,供大家参考,具体内容如下 StringUt…

    编程技术 2025年3月8日
    200
  • 在javascript中如何实现异步图片上传

    给大家详细讲解一下如何通过javascript写出异步图片上传,并且把实例代码给大家分享了下,有兴趣的读者们测试一下吧。 我们首先看下HTML代码实现的form提交部分。其中大家在测试的时候需要把test的URL更换成自己的,也可以直接写一…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论