vue-resource 实现get post jsonp请求

除了vue-resource之外, 还可以用AXIOS的第三方包来实现 数据的请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
    <!--vue-resource依赖于vue 先后顺序要注意-->
    <script src="js/vue-resource.js"></script>
    <!--this.$http.方法-->
</head>
<body>
<div id="app">
    <input type="button" value="get请求" @click="getInfo">
    <input type="button" value="post请求" @click="postInfo">
    <input type="button" value="jsonp请求" @click="jsonpInfo">
</div>
</body>
<script>
    var vm=new Vue({
        el:"#app",
        data:{},
        methods:{
            getInfo(){
                this.$http.get('http://www.liulongbin.top:3005/api/getprodlist').then (function (result) {
                    console.log(result)
                })
            },
            postInfo(){//发起post请求 application/x-www-form-urlenconded
                //手动发起的post请求,默认没有表单格式,所以,有的服务器处理不了
                //通过设置 post方法的第三个参数 设置提交方式为一个表单方式
                this.$http.post('http://www.liulongbin.top:3005/api/getprodlist',{/*提交的数据*/},{/*数据的格式*/emulateJSON:true}).then(function (result) {
                    console.log(result.body)
                })
            },
            jsonpInfo(){
                //发起JSONP请求
                this.$http.jsonp('http://www.liulongbin.top:3005/api/getprodlist').then(result=>{
                    console.log(result.body)
                })
            }
        }
    })
</script>
</html>

JSONP原理
由于浏览器的限制, 不允许AJAX访问,协议不同,域名不同,端口号不同的数据接口,浏览器认为这种访问不安全
通过动态创建script标签的形式,当做引入脚本

当引入一个JS脚本的时候 会在请求的时候定义一个callback 后端帮我们把需要的数据当做参数传到这个callback函数中,然后在前台调用我们已经准备好的callback函数,通过参数 我们就能拿到后端传回来的数据

NODE代码

const http=require("http")
const urlModule=require("url")
const sever=http.createServer()
sever.on('request',function(req,res){
    //const url=req.url;
    const {pathname:url, query }=urlModule.parse(req.url,true)
    if(url ==='/getscript'){
        //拼接一个合法的JS脚本,这里拼接的是一个方法的调用
        //通过res.end发送给客户端
        var data={
            name:"xjj",
            age:18,
            gender:"女孩子"
        }
        console.log(query.callback)
        var scriptStr=`${query.callback}(${JSON.stringify(data)})`
        res.end(scriptStr)
        console.log(scriptStr)
    }else{
        res.end('404')
    }
})
sever.listen(3000,'127.0.0.1')

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    function showInfo (data){
        console.log('OK')
        console.log(data);
    }
</script>
<script src="http://127.0.0.1:3000/getscript?callback=showInfo"></script>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容