站長資訊網
        最全最豐富的資訊網站

        vuejs怎么用ajax

        方法:1、安裝并引入axios,用“axios([option])”、“axios.get(url[,…])”等方法發送請求。2、安裝并引入vue-resource,用“this.$http.jsonp(url,[…])”發送請求。

        vuejs怎么用ajax

        本教程操作環境:windows7系統、vue2.9.6版,DELL G3電腦。

        vue本身不支持發送AJAX請求,需要使用vue-resource、axios等插件實現。

        axios是一個基于Promise的HTTP請求客戶端,用來發送請求,也是vue2.0官方推薦的,同時不再對vue-resource進行更新和維護。

        vuejs使用ajax的方法

        1、安裝axios并引入

        1)npm的方式: npm install axios -S

        2)bower的方式: bower install axios

        3)cdn的方式:<script src=”https://unpkg.com/axios/dist/axios.min.js”></script>

        2、基本用法

        1)axios([options])

        <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>axios發送ajax請求基本用法</title>     <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>     <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body>     <div id="app">         <button @click="send">發送ajax請求</button>     </div>     <script>         new Vue({             el:"#app",             methods:{                 send(){                     axios({                        method:'get',                         url:'user.json'                     }).then(function(res){                         console.log(res.data.name);                     });                 }             }         });     </script> </body> </html>

        vuejs怎么用ajax
        2)axios.get(url[,options]);

        傳參方式:
        (1)通過url傳參axios(‘url?key=value&key1=val2’).then();
        (2)通過params選項傳參 axios(‘url’,{params:{key:value}}).then();

        3)axios.post(url,data,[options]);

        axios默認發送數據時,數據格式是Request Payload,并非常用的Form Data格式,
        所以參數必須要以鍵值對形式傳遞,不能以json形式傳。

        傳參方式:

        (1)自己拼接為鍵值對

        axios.post(‘url’,’key=value&key1=value1’).then();

        (2)使用transformRequest,在請求發送前將請求數據進行轉換

        axios.post('url',data,{                         transformRequest:[                                 function(data){                                     let params = '';                                     for(let index in data){                                         params +=index+'='+data[index]+'&';                                     }                                     return params;                                 }                         ]                     }).then(function(res){                         console.log(res.data)                     });

        (3)如果使用模塊化開發,可以使用qs模塊進行轉換

        axios本身并不支持發送跨域的請求,沒有提供相應的API,作者也暫沒計劃在axios添加支持發送跨域請求,
        所以只能使用第三方庫

        跨域請求(使用vue-resource發送跨域請求)

        1、使用vue-resource發送跨域請求步驟

        • 安裝vue-resource并引入:npm install vue-resource -S
        • 基本用法:

        使用this.$http.jsonp(url,[ops]) 發送請求

        2、基本使用演示(360搜索)

        1)打開360搜索,然后輸入字符’a’會有一些搜索選項自動提示,如圖
        vuejs怎么用ajax
        2)復制鏈接
        https://sug.so.360.cn/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word&word=a
        3)代碼演示

        <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>使用vue-resource發送跨域請求</title>     <!--引入vue、vue-resource文件-->     <script src="vue.min.js"></script>     <script src="vue-resource.min.js"></script> </head> <body>     <div id="app">         <button @click="sendJsonp">send</button>     </div>     <script>             var vm = new Vue({                 el:"#app",                 methods:{                     sendJsonp:function(){                         this.$http.jsonp('https://sug.so.360.cn/suggest',{                             params:{                                 word:'a'                             }                         }).then(function(res){                             console.log(res.data);                         });                     }                 }             });     </script> </body> </html>

        4)結果

        vuejs怎么用ajax

        3、基本例子演示(百度搜索)

        1)要求同360搜索的要求

        vuejs怎么用ajax
        2)復制鏈接
        =1526436420943”>https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=a&json=1&p=3&sid=1467_21117_20927&req=2&csor=1&cb=jQuery1102060305102784707_1526436420940&=1526436420943
        3)代碼演示(注意)–第一次嘗試
        如果按照上述代碼的方式去寫,那結果會報錯

        <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>使用vue-resource發送跨域請求</title>     <!--引入vue、vue-resource文件-->     <script src="vue.min.js"></script>     <script src="vue-resource.min.js"></script> </head> <body>     <div id="app">         <button @click="sendJsonp">send</button>     </div>     <script>             var vm = new Vue({                 el:"#app",                 methods:{                     sendJsonp:function(){                  this.$http.jsonp('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',{                             params:{                                 wd:'a'                             }                         }).then(function(res){                             console.log(res.data);                         });                     }                 }             });     </script> </body> </html>

        結果會報錯

        vuejs怎么用ajax
        那這是為什么呢?

        之前360搜索jsonp回調的參數名是callback,而百度使用的參數名為cb,所以會報錯

        修改過后的代碼如下

        <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>使用vue-resource發送跨域請求</title>     <!--引入vue、vue-resource文件-->     <script src="vue.min.js"></script>     <script src="vue-resource.min.js"></script> </head> <body>     <div id="app">         <button @click="sendJsonp">send</button>     </div>     <script>             var vm = new Vue({                 el:"#app",                 methods:{                     sendJsonp:function(){          this.$http.jsonp('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',{                             params:{                                 wd:'a'                             },                             jsonp:'cb'                         }).then(function(res){                             console.log(res.data);                         });                     }                 }             });     </script> </body> </html>

        4)結果

        vuejs怎么用ajax

        4、百度搜索案例演示

        <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>百度搜索列表</title>     <style>         .current{             background-color:#CCCCCC;         }     </style>     <!--引入vue、vue-resource文件-->     <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>     <script src="https://cdn.jsdelivr.net/npm/vue-resource@1.5.0"></script> </head> <body>     <script>     window.onload=function() {         new Vue({             el: "#app",             data: {                 keyword: '',                 myData:[],                 now: -1             },             methods: {                 getData(e) {                     //如果按方向鍵上、下,則不發請求                     if (e.keyCode == 38 || e.keyCode == 40)                         return;                     this.$http.jsonp(                     'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su', {                         params: {                             wd: this.keyword                         },                         jsonp: 'cb'                     }).then(function (res) {                         console.log(res.data.s);                         this.myData = res.data.s;                     });                 },                 changeDown() {                     this.now++;                     this.keyword = this.myData[this.now];                     if (this.now == this.myData.length) {                         this.now = -1;                     }                 },                 changeUp() {                     this.now--;                     this.keyword = this.myData[this.now];                     if (this.now == -2) {                         this.now = this.myData.length - 1;                     }                 }             }         });     }     </script>     <div id="app">         <input type="text" v-model="keyword"                  @keyup="getData($event)" @keydown.down="changeDown"                  @keydown.up.prevent="changeUp"         />         <ul>             <li v-for="(val,index) in myData" :key="index"                                  :class="{current:index==now}"             >                 {{val}}             </li>         </ul>     </div> </body> </html>

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 中文字幕精品一区二区日本| 国产精品视频一区二区三区经 | 国产在线精品国自产拍影院| 99久久久国产精品免费无卡顿| 亚洲第一永久AV网站久久精品男人的天堂AV | 欧美精品整片300页| 午夜精品美女写真福利| 久久99精品久久久久久动态图| 男女男精品网站免费观看| 午夜精品美女自拍福到在线| 国产精品对白交换视频| 日韩人妻精品一区二区三区视频| 亚洲精品乱码久久久久久不卡| 国产亚洲精品国看不卡| 99久久精品免费国产大片| 国产精品久久久久aaaa| 国产综合精品一区二区三区| 亚洲AV无码精品色午夜果冻不卡 | 久久精品这里热有精品| 国产精品特级毛片一区二区三区| 无码国产精品一区二区免费模式| 中文字幕一区二区三区日韩精品| 亚洲国产成人精品女人久久久 | 国产精品亚洲аv无码播放| 色欲久久久天天天综合网精品 | 日韩精品人妻系列无码专区| 自拍偷自拍亚洲精品被多人伦好爽| 亚洲欧美日韩国产成人精品影院 | 婷婷久久精品国产| 久久久精品国产亚洲成人满18免费网站 | 伊人久久精品无码二区麻豆| 久久国产精品偷99| 国模和精品嫩模私拍视频| 国产一区二区精品尤物| 国产一区麻豆剧传媒果冻精品| 国产精品原创巨作?v网站| 国产69精品久久久久99| 成人精品一区二区三区在线观看| 99久久亚洲综合精品网站| 国产精品免费大片一区二区| 国内精品久久久久久麻豆|