美文网首页
jsonp实现跨域请求

jsonp实现跨域请求

作者: Splendid飞羽 | 来源:发表于2021-05-09 15:45 被阅读0次

核心原理:利用script标签可以跨过同源策略的限制,在其url后面 增加一个callback函数,函数封装传给后台的参数,比如script.src = 'http://localhost:8081?user=admin&callback=handleCallback';后台代码通过访问url中的callback参数获取到对应的fn,然后拼接对应的参数,将其返回,前端页面中定义的这个回调函数的实体就会执行。
项目根目录比较简单

image.png

1、创建项目根目录

mkdir http-server
cd http-server
npm init 
这样就会创建一个包含package.json的空目录

2、使用http-server配置前端服务

使用http-server开启的本地服务器

http-server的安装:npm installl http-server -g
使用:在项目的根目录下,运行http-server,即会启动一个前端服务器,如下图:
这时候我们的前端服务构建完成,浏览器访问http://192.168.1.102:8081/  即可打开前台页面
image.png

index.html的代码如下

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>jsonp</title>
</head>

<body>

</body>

</html>
<script>
    var script = document.createElement('script');
    script.type = 'text/javascript';
    // 传参一个回调函数名给后端,方便后端返回时执行这个在前端定义的回调函数
    script.src = 'http://localhost:8081?user=admin&callback=handleCallback';
    document.head.appendChild(script);
    // 回调执行函数
    function handleCallback(res) {
        console.log(JSON.stringify(res));
    }
</script>

3、使用nodejs模拟后台代码——server.js

后台nodejs代码结构,使用node server.js开启后台服务

1、node服务的端口就是上面的index.html中请求的端口哦
2、qs模块是对url中的参数进行序列化,需要安装 npm install qs
var http = require('http');
var qs = require('qs');
var server = http.createServer();

server.on('request', function(req, res) {
    var params = qs.parse(req.url.split('?')[1]);
    var fn = params.callback;

    // jsonp返回设置
    res.writeHead(200, { 'Content-Type': 'text/javascript' });
    res.write(fn + '(' + JSON.stringify(params) + ')');

    res.end();
});

server.listen('8081');//这里的端口一定要和script中的访问路径一致
console.log('Server is running at port 8080...');
注意:将前台服务和后台服务都启动完了后,就可以打开浏览器控制台,会看到控制台已经将后台穿回来的callback成功执行,并打印了其中的参数。(返回时即执行全局函数)
image.png

相关文章

  • JavaScript - GET/POST及跨域方法

    xhr 原生方法请求 window fetch 方法 关于跨域 利用JSONP实现跨域调用 使用 CORS(跨域资...

  • js跨域问题

    来源 javascript中实现跨域的方式总结 第一种方式:jsonp请求;jsonp的原理是利用 标签的跨域特性...

  • 完成vue项目过程中的一些要点

    1、html适配移动端 2、vue实现双向绑定 跨域请求方法 1、jsonp原理利用 可以跨域请求js文件 所以...

  • 结合Promise 封装JSONP方法

    jsonp jsonp是一种前端开发中跨域的解决方案。利用了script 标签可以跨域请求的特性。实现步骤: 1....

  • ajax跨域请求

    ajax跨域请求(jsonp) 利用JSONP解决AJAX跨域问题的原理与jQuery解决方案JSONP jQue...

  • 【JavaScript】ajax跨域发送POST

    跨域可以使用jsonp,实现跨域请求,但是这种方式只能发送GET请求,type设置为POST也会自动转为GET,因...

  • JSON Hijacking

    大概就是利用jsonp跨域请求,来实现csrf攻击。 JSONP存在的JSON Hijacking漏洞以及与csr...

  • JSONP原理探究

    介绍   JSONP是一直种解决跨域问题的方案,实现的原理来自于页面中的 标签能够跨域请求资源。要通过JSONP实...

  • 详解 JSONP跨域请求的实现

    详解 JSONP跨域请求的实现[https://www.cnblogs.com/zhaosq/p/10511633...

  • 前端跨域请求原理及实践

    一、 跨域请求的含义 2.3 使用 标签原生实现 JSONP 经过上面的事件,你是不是觉得 JSONP 的实现和...

网友评论

      本文标题:jsonp实现跨域请求

      本文链接:https://www.haomeiwen.com/subject/tqamdltx.html