axios或jquery或<script>
- 请求第三方接口
- axios通过代理
- $getJSON
- 跨域请求
- script标签
- jsonp
请求第三方接口
axios通过代理
- 跨域请求地址
https://lab.isaaclin.cn/nCoV/api/overall
https://lab.isaaclin.cn/nCoV/api/area?province=北京市
- config下index.js的proxytable配置
'/bpi':{
target: 'https://lab.isaaclin.cn/nCoV/api',
changeOrigin: true,
pathRewrite: {
'^/bpi': ''
}
}
- .vue文件进行axios请求
this.$axios.get("/bpi/overall").then((res)=>{
console.log(res.data)
})
this.$axios.get("/bpi/area?province=北京市").then((res)=>{
console.log(res.data)
})
$getJSON
$.ajaxSettings.async = false;//防止返回数据混乱,同步请求
$.getJSON(url1, (res)=>{
console.log(res)
})
$.getJSON(url1, (res)=>{
console.log(res)
})
$.ajaxSettings.async = true;//重置回异步,防止影响其他
奇怪的问题
不论上面那一种哪一种方法,都不能同时请求两个,$.getJSON会报Access-Control-Allow-Origin
的错,axios会报503
的错。也没找到好的解决方案,暂时解决方案为两个请求一个放在app.vue,一个放在index.vue。
跨域请求
script标签
前端
<script>
//回调函数,处理返回
function showData (result) {
console,log(result)
}
$(document).ready(function () {
//插入标签
$("head").append("<script src='https://lab.isaaclin.cn/nCoV/api/overall?callback=showData'><\/script>");
});
</script>
后端返回
callback是jquery在进行跨域请求时生成的一个回调函数名,当页面取得服务器返回的值时,会由该回调函数解析成json对象。所以在返回数据时应该把对整个回调函数的调用进行返回,这个函数需要一个json对象的字符串作为参数,这样才能正常解析。
返回格式示例:callback({“name”:”hello”})
//前端传过来的回调函数名称
String callback = request.getParameter("callback");
//用回调函数名称包裹返回数据,这样,返回数据就作为回调函数的参数传回去了
result = callback + "(" + result + ")";
}
jsonp
jsonp的原理就是通过script的src,将函数作为src请求地址的参数来传递数据,所以jsonp只有get一种传输方式。
前端
function showData (result) {
console,log(result)
}
$.ajax({
url: "https://lab.isaaclin.cn/nCoV/api/overall",
type: "GET",
dataType: "jsonp", //指定服务器返回的数据类型
jsonpCallback: "showData", //指定回调函数名称
success: function (data) {
console.info("调用success");
}
});
后端返回
callback是jquery在进行跨域请求时生成的一个回调函数名,当页面取得服务器返回的值时,会由该回调函数解析成json对象。所以在返回数据时应该把对整个回调函数的调用进行返回,这个函数需要一个json对象的字符串作为参数,这样才能正常解析。
返回格式示例:callback({“name”:”hello”})
//前端传过来的回调函数名称
String callback = request.getParameter("callback");
//用回调函数名称包裹返回数据,这样,返回数据就作为回调函数的参数传回去了
result = callback + "(" + result + ")";
}