跨域问题可以参考阮一峰的博客,讲的很详细。
跨域资源共享 CORS 详解
这里记录一下,node.js服务端和axios/ajax请求的实践代码。
node.js
//以express为例
//设置跨域访问
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Content-Type");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");;
next();
});
axios
get: 常规操作
post: 需要将post data转化成文本,否则content-type: application/json,跨域成非简单请求,进入预检请求。会增加一次HTTP查询请求。axios的一个bug. axios issues362
//get
axios.get('http://127.0.0.1:8081/getJson')
.then(res=>{
console.log(res);
})
.catch(err=>{
console.log(err);
})
//post
//user JSON.stringify or other libs like qs.stringify
let data=JSON.stringify({
data:'axios',
info:{
type:'post',
}
})
axios.post('http://127.0.0.1:8081/postJson',data)
.then(res=>{
console.log(res);
})
.catch(err=>{
console.log(err);
})
ajax
正常操作即可
//get
$.get('http://127.0.0.1:8081/getJson',(data,status)=>{
console.log(status);
console.log(data);
})
//post
//跨域请求post
$.post('http://127.0.0.1:8081/postJson',{
data:'ajax',
info:{
data:'post',
}
},(data,status)=>{
console.log(status);
console.log(data);
})