美文网首页
JSONP的实现原理及简单封装思路

JSONP的实现原理及简单封装思路

作者: Nanshannan | 来源:发表于2018-09-25 14:27 被阅读0次

喜欢请关注 会不定时更新 ***

  • 简单来说通过script标签的src属性,src属性不仅仅可以写 JS文件,可以请求任意文件。jsonp是通过JS这一特点实现,并添加async(异步属性)。

当我们用src请求一下后台文件(例如:php)。

1.如果我们在PHP文件中返回来的是 var data =1一条一句的话,将立即执行,那我们需要创建很多个script,才能完成我们的需求 (看下下面PHP部分代码)

2.而且加了async有可能在下面拿不到。

所以一般在后台文件中返回的是函数调用,前台定义一个函数。通过SRC属性地址后?callback=hi. 前端页面就是hi()。并且用函数的形式可以解决异步的问题。(看下下面PHP部分代码)

普通请求 通过控制台的 的 xhr 。而JSONP是通过控制台的js请求文件。

注意:动态创建的script都是异步的。

封装源码:

<script>
    function ajax(option){
        var defalus = {
            jsonp:'callback' //默认发送请求的值是函数名的值   
        }
        // 覆盖默认参数
        for(var attr in option){
            defalus[attr] = option[attr];
        }
        var p = '';
        if(defalus.data){
            for(var key in defalus.data){
                p += key+ '='+ defalus.data[key] + '&'
            }           
        }
        var cbName ;
        if(defalus.jsonpCallback){
            cbName = defalus.jsonpCallback;
        }else{
             // 回调函数名称
            cbName = 'jQuery' + ('v1.11.1' + Math.random()).replace(/\D/g,'') + '_' + new Date().getTime();
        }
        window[cbName] = function (data){
            defalus.success(data);   
        }
        var srcipt = document.createElement('script'); 
        
        srciptt.src = defalus.url + '?' + p + defalus.jsonp + '=' + defalus.jsonpCallback
        var head = document.getElementsByTagName('head')[0];
        head.appendChild(srciptt);
    }
    ajax({
      url: 'http://lp.com/jsonp/data1.php',
      dataType: 'jsonp',
      jsonp: 'callback',
      jsonpCallback: 'hi',
      data: {flag:1,abc:'hi'},
      success: function(data){
        console.log(data)
      }
    });
    </script>
/*PHP部分*/
<?php 
  $cbName = $_GET['callback'];// hello
  // PHP数组
  $arr = array('uname'=>'张三','age'=>'12');
  // 把数组转化为json字符串
  $str = json_encode($arr);
  // echo $str;
  // echo 'var data = 1;';
  // echo 'foo(1)';
  echo $cbName.'('.$str.')';
 ?>

相关文章

  • JSONP的实现原理及简单封装思路

    喜欢请关注 会不定时更新 *** 简单来说通过script标签的src属性,src属性不仅仅可以写 JS文件,可以...

  • JSONP原理及简单实现

    JSONP是实现跨域通信的解决方案 比如 callback定义一个函数名称,而远程服务端通过调用指定的函数并传入参...

  • JSONP原理及实现

    基本原理 基本原理: 主要就是利用了 script 标签的src没有跨域限制来完成的。 执行过程 执行过程: 前端...

  • JSONP原理及实现

    一、JSONP JSONP全称 JSON with Padding,用于解决跨域问题的一种方案。由于同源策略的限制...

  • 自己封装的JSONP请求,如何异常处理

    自己封装的JSONP异常处理,原理还是利用超时

  • JSONP原理

    只要说到跨域,就必须聊到JSONP,就必须讲一下JSONP的实现原理,以及在项目中哪个需求使用了JSONP,简单讲...

  • 【二】JSONP原理及promise封装

    关于专题【vue开发音乐App】 在我们想要获取其他网站数据的时候,浏览器的同源策略(Same origin po...

  • JSONP技术原理及实现

    转自《跨域jsonp的原理》 首先确定为什么要用jsonp,因为要跨域请求数据,那为什么会发生跨域呢,因为浏览器的...

  • 跨域

    JSONP jsonp是一种跨域通信的手段,它的原理其实很简单: 首先是利用script标签的src属性来实现跨域...

  • day02-vuejs-vue-resource实现get, p

    vue-resource实现get, post, jsonp]请求: JSONP的实现原理: 由于浏览器的安全性限...

网友评论

      本文标题:JSONP的实现原理及简单封装思路

      本文链接:https://www.haomeiwen.com/subject/kmfloftx.html