JSONP
- JSONP是一个非官方的跨域解决方案,纯粹凭借程序员的聪明才智开发出来,只支持get请求
- 工作方式:在网页有一些标签天生具有跨域能力:img、link、iframe、script;JSONP就是利用script标签的跨域能力来发送请求的
8.3.1. 原理
.html
- response.end()返回的结果是函数调用,函数的参数是想给客户端返回结果的数据,函数必须在前端页面提前声明,(前端页面的函数对返回过去的数据进行处理)
- script标签中引用url
原理演示
server.js
//原理:返回的结果是函数调用,函数的参数是想给客户端返回结果的数据
//函数要在前端页面提前声明(前端函数对返回过去的数据进行处理)
app.all('/jsonp-server', (request, response) => {
const data = {
name: 'phy'
};
//将数据转化成字符串
let str = JSON.stringify(data);
//返回结果
response.end(`handle(${str})`);
})
8.3.2. JSONP实践
.html
案例
用户名:
server.js
//检测用户名是否存在
app.all('/check-username', (request, response) => {
const data = {
exist: 1,
msg: '用户名已经存在'
};
//将数据转化成字符串
let str = JSON.stringify(data);
//返回结果
response.end(`handle(${str})`);
})
8.3.3. jQuery-jsonp
.html
url后需加?callback=?固定写法
jQuery-jsonp
server.js
//jQuery-jsonp
app.all('/jquery-jsonp-server', (request, response) => {
const data = {
name: 'jscksmk',
city: ['北京', '上海', '杭州']
};
//将数据转化成字符串
let str = JSON.stringify(data);
//接收callback参数
let cb = request.query.callback;
//返回结果
response.end(`${cb}(${str})`);
})