如何在1分钟内完美解释什么是 JSONP 请求?何为JSONPJSONP是JSON with Padding的略称,JSONP为民间提出的一种跨域解决方案,通过客户端的script标签发出的请求方式。
那请求何必做得如此麻烦,直接使用ajax做请求岂不美哉,这里便要涉及到一个同源和跨域的问题,往下。
同源请求和跨域请求代码语言:javascript代码运行次数:0运行复制同源策略,它是由Netscape网景公司提出的一个著名的安全策略现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。
而所有非同源的请求(即 域名,协议,端口 其中一种或多种不相同),都会被作为跨域请求,浏览器会将其非同源的响应数据丢弃。
这里可以理解为是浏览器在搞事情,服务端确确实实有返回数据,浏览器接收到返回的数据,发现我们请求的是一个非同源的数据,浏览器再将其响应报文丢弃掉。
而通过一些标签发出的请求则不会被进行同源检查,比如script标签,img标签等等,本文讲述JSONP便是通过script标签做的请求。
JSONP的实现流程图示:https://cdn1.tianli0.top/gh/web-xc/iMG/posts/jsonp.jpg
流程:在发请求先,准备一个全局的接收函数
代码语言:javascript代码运行次数:0运行复制window.myCallback = (res)=>{ //声明一个全局函数 'callback',用于接收响应数据
console.log(res)
}在html创建script标签,发出请求
代码语言:javascript代码运行次数:0运行复制
....
window.myCallback = (res)=>{ //这里为上一步定义的全局函数
console.log(res)
}
//script标签的请求必须在写在定义全局函数之后
//这里需将全局函数的函数名作为参数callback的value传递
//这里callback这个键名是前后端约定好的