vue-cli4.0 使用 jsonp

1. 安装jsonp扩展

cnpm i vue-jsonp —save-dev

 

2. /src/main.js 引入

1 // 引入 vue-jsonp
2 import VueJsonp from 'vue-jsonp'
3 
4 // 使用 vue-jsonp
5 Vue.use(VueJsonp, 5000)

3. 使用,JSONP的回调函数要写到 window 对象上,不然无法触发,如果有更好的方法请留言,谢谢

 1 <template>
 2   <div class="hello container">
 3     <h1>{{ msg }}</h1>
 4     <button class="btn btn-primary" @click="sendJsonp">JSONP</button>
 5     <ul id="list"></ul>
 6   </div>
 7 </template>
 8 
 9 // 引入 vue-jsonp
10 import jsonp from 'vue-jsonp'
11 
12 // 回调函数必须定义到 window 对象上
13 window.test = (data) => {
14   //获取外层 SECTION
15   const oList   =   document.getElementById('list');
16   oList.className = 'list-group';
17   //PHP json_encode() 返回的数据在JS为数组类名
18   const aDate   =   data;
19 
20   for (var i = 0; i < aDate.length; i++) {
21     //创建 LI 标签
22     const oLi = document.createElement('li');
23     oLi.className = 'list-group-item';
24     //将数组中的信息添加到 LI 中
25     oLi.innerHTML = aDate[i];
26     //将 LI 追加到 UL 中
27     oList.appendChild(oLi);
28   }
29 }
30 
31 export default {
32   name: 'HelloWorld',
33   data () {
34     return {
35       msg: 'Welcome to Your Vue.js App'
36     }
37   },
38   methods: {
39     sendJsonp() {
40       this.$jsonp('http://www.api.test/test/jsonp/index.php', {
41         // 回调函数
42         m: 'test',
43         name: 'MyName',
44         age: 20
45       }).then(json => {
46 
47       }).catch(err => {
48         // Failed.
49       })
50     }
51   }
52 }

 

4. 后端PHP测试代码

 1 <?php
 2     header('content-type:text/html;charset=utf-8');
 3     // http://www.api.test/test/02/index.php
 4     $method = $_GET['m'];
 5     $arr = array(
 6         'linux',
 7         'apache',
 8         'mysql',
 9         'php'
10     );
11 
12     $callBack = $method . '(' . json_encode($arr) . ')';
13 
14     echo $callBack;

 

上一篇:ajax跨域、jsonp原理


下一篇:Javascript-在使用jQuery请求JSONP时可以使用静态(即预定的)回调函数名称吗?