原理:JS 动态插入 script 并将 src 指向后端 API,后台返回 json 并使用协定的 callback 函数把 json 包起来。浏览器以 JS 内容解析执行返回的内容,回调函数得以被调用并传入了返回的 json 对象
解决问题:解决的是第一版 XHR 无法发送跨域请求的问题,虽然曾经一度被大厂使用,但是 hack 痕迹满满,并且不支持 post 请求。XHR 2.0 以及 Fetch API 如今兼容性都不错,他们支持 CORS HTTP headers,是跨域资源共享的官方解决方案
步骤如下:
function JSONP(url, params, callback) {
const script = document.createElement("script");
script.src = url + parseObjToParams({...params, callback: "jsonpCallback"});
document.body.appendChild(script);
window.jsonpCallback = callback;
script.onload = () => {
document.body.removeChild(script)
}
}
JSONP("http://localhost:3019/asd", {name: "vijay"}, (data) => {
console.log(data);
});
//server
app.use("/asd", (req, res, next) => {
res.jsonp({ user: 'tobi' })
});
原文:https://www.cnblogs.com/EricZLin/p/12405202.html