jsonp手写1

 1 <script>
 2     /*
 3       jsonp({
 4          url: 'http://localhost:3000/',
 5          data: '',
 6          success: function(data){
 7               console.log(data);
 8          }
 9       })
10     */
11 
12     (function (w) {
13         /**
14          * jsonp的实现
15          * @param {Object}option
16          */
17           function jsonp(option) {
18               // 1. 函数挂载在全局
19               w.getData = option.success;
20               // 2. 处理url链接
21               option.url = option.url + '?callback=getData';
22               // 3. 创建script标签插入body
23               var scriptEle = document.createElement('script');
24               scriptEle.src = option.url;
25               document.body.appendChild(scriptEle);
26           }
27           w.jsonp = jsonp;
28     })(window);
29 </script>
30 <script>
31     jsonp({
32         url: 'http://localhost:3000/',
33         success: function (data) {
34             console.log(data);
35             alert('111');
36         }
37     });
38 
39     jsonp({
40         url: 'http://localhost:3000/',
41         success: function (data) {
42             console.log(data);
43             alert('222');
44         }
45     });
46 
47     jsonp({
48         url: 'http://localhost:3000/',
49         success: function (data) {
50             console.log(data);
51             alert('333');
52         }
53     });
54 </script>

多次调用会发生结果覆盖

 1 <script>
 2     (function (w) {
 3         /**
 4          * jsonp的实现
 5          * @param {Object}option
 6          */
 7           function jsonp(option) {
 8               // 0. 产生不同的函数名
 9               var callBackName = 'itLike' + Math.random().toString().substr(2) +  Math.random().toString().substr(2);
10               // console.log(callBackName);
11             // 1. 函数挂载在全局
12               w[callBackName] = option.success;
13               // 2. 处理url链接
14               option.url = option.url + '?callback=' + callBackName;
15               // 3. 创建script标签插入body
16               var scriptEle = document.createElement('script');
17               scriptEle.src = option.url;
18               document.body.appendChild(scriptEle);
19           }
20           w.jsonp = jsonp;
21     })(window);
22 </script>
23 <script>
24     jsonp({
25         url: 'http://localhost:3000/',
26         success: function (data) {
27             console.log(data);
28             alert('111');
29         }
30     });
31 
32     jsonp({
33         url: 'http://localhost:3000/',
34         success: function (data) {
35             console.log(data);
36             alert('222');
37         }
38     });
39 
40     jsonp({
41         url: 'http://localhost:3000/',
42         success: function (data) {
43             console.log(data);
44             alert('333');
45         }
46     });
47 </script>
 1 <script>
 2     (function (w) {
 3         /**
 4          * jsonp的实现
 5          * @param {Object}option
 6          */
 7           function jsonp(option) {
 8               // 0. 产生不同的函数名
 9               var callBackName = 'itLike' + Math.random().toString().substr(2) +  Math.random().toString().substr(2);
10               // console.log(callBackName);
11             // 1. 函数挂载在全局
12               w[callBackName] = function (data) {
13                   option.success(data);
14                   // 删除script标签
15                   document.body.removeChild(scriptEle);
16               };
17               // 2. 处理url链接
18               option.url = option.url + '?callback=' + callBackName;
19               // 3. 创建script标签插入body
20               var scriptEle = document.createElement('script');
21               scriptEle.src = option.url;
22               document.body.appendChild(scriptEle);
23           }
24           w.jsonp = jsonp;
25     })(window);
26 </script>
27 <script>
28     jsonp({
29         url: 'http://localhost:3000/',
30         success: function (data) {
31             console.log(data);
32             alert('111');
33         }
34     });
35 
36     jsonp({
37         url: 'http://localhost:3000/',
38         success: function (data) {
39             console.log(data);
40             alert('222');
41         }
42     });
43 
44     jsonp({
45         url: 'http://localhost:3000/',
46         success: function (data) {
47             console.log(data);
48             alert('333');
49         }
50     });
51 </script>

 

posted @ 2019-07-22 20:34  疏影横斜水清浅  阅读(273)  评论(1编辑  收藏  举报