zoukankan      html  css  js  c++  java
  • JSONP

    JSONP——JSON with Padding

    同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性

    受到请求的 URL 的域必须与当前 Web 页面的域相同。这意味着浏览器隔离来自不同源的内容,以防止它们之间的操作。

    JSONP(JSON with Padding)是一个非官方的协议,允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(是JSONP简单的实现形式)

    作用:

      由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源,为了实现跨域请求,可以通过script标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数,从而解决了跨域的数据请求。

    执行过程:

      (1)在客户端注册一个callback, 然后把callback的名字传给服务器

      (2)服务器先生成 json 数据


      (3)以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp

      (4)将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端

      (5)客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里

    js

    <script type="text/javascript" src="jquery.js"></script>  
    <script type="text/javascript">  
        $.ajax({  
            url:"http://crossdomain.com/services.php",  
            dataType:'jsonp',  
            data:'',  
            jsonp:'callback',  
            success:function(result) {  
                for(var i in result) {  
                    alert(i+":"+result[i]);//循环输出a:1,b:2,etc.  
                }  
            },  
            timeout:3000  
        });  
    </script>  

    服务端php

    <?php  
      
      //服务端返回JSON数据  
      $arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);  
      $result=json_encode($arr);  
      //echo $_GET['callback'].'("Hello,World!")';  
      //echo $_GET['callback']."($result)";  
      //动态执行回调函数  
      $callback=$_GET['callback'];  
      echo $callback."($result)";  

    jquery和ext等框架都把jsonp作为ajax的一种形式进行了封装

    缺点:

      没有关于 JSONP 调用的错误处理

      被不信任的服务使用时会很危险

  • 相关阅读:
    vue项目接入百度地图
    angularJS 十六进制与字符串相互转换
    angular项目实现mqtt的订阅与发布 ngx-mqtt
    消息中间件MQTT
    Zigbee 与 WiFi 的区别
    angular6 路由拼接查询参数如 ?id=1 并获取url参数
    SpringBoot拦截器
    SpringBoot定时任务
    SpringBoot 各层之间的关系
    百度离线地图 —— 瓦片地图下载
  • 原文地址:https://www.cnblogs.com/baby123/p/5337031.html
Copyright © 2011-2022 走看看