jsonp仅支持get请求
客户端首先封装一个jsop函数,代码如下
function jsonp (options) {
// 创建script标签
var script = document.createElement('script');
// 生成随机函数名
var fnName = 'jsonp' + Math.random().toString().replace('.', '') + new Date().getTime();
// 为全局作用域下添加一个属性 属性的名字就是我们随机生成的函数名
// 让属性的值指向调用jsonp函数时传递的success
window[fnName] = options.success;
// 参数
var params = '';
// 循环用户传递的参数
for (var attr in options.data) {
params += '&' + attr + '=' + options.data[attr]
}
// 为script标签设置src属性
script.src = options.url + '?callback=' + fnName + params;
// 将html标签追加到页面中
document.body.appendChild(script);
// 当script标签加载完成之后
script.onload = function () {
// 将script标签从页面中删除
document.body.removeChild(this);
}
}
封装之后效果跟Ajax使用差不多
jsonp({
url:'localhost:8000/user',
data:params,
success:function(res){}
)
服务器端在拿到数据后可以调用res.jsonp()方法把数据传入
app.get('localhost:8000/user',(req,res)=>{
cosnt data = {name:'张三',age:22}
res.jsonp(data)
})
这样就可以了