jsonp

Build Status Coverage Status

利用<script>标签没有跨域限制的“漏洞”(历史遗迹啊)来达到与第三方通讯的目的。当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址

简单实现jsonp


跨域服务器 : ./testjsonp.js

callback("come from server data ");

本地服务器: ./localhtml.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>

    <script type="text/javascript"> 
        function callback(data){
            alert('我是本地函数,可以被跨域的remote.js文件调用,远程js带来的数据是:' + data); 
        }; 
    </script> 
    <script type="text/javascript" src="http://liushi.tech/php/phpbase/jsonp/testjsonp.js"></script>

</body>
</html>

运行localhtml.html

php拼接字符串实现jsonp


跨域服务器 : ./testserver.php

<?php

    $age=array("Bill"=>"60","Steve"=>"56","Mark"=>"31");

    $callback = $_GET['callback'];

    echo $callback . "(" . json_encode($age) . ")";

?>

本地服务器: ./localhtml.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        function callbackFunction(data){
            console.log(data);
        }; 
    </script>

    <script type="text/javascript" src="http://liushi.tech/php/phpbase/jsonp/testserver.php?callback=callbackFunction"></script>

</body>
</html>

运行localhtml.html

jQuery实现jsonp


跨域服务器 : ./testserver.php

<?php

    $age=array("Bill"=>"60","Steve"=>"56","Mark"=>"31");

    $callback = $_GET['callback'];

    echo $callback . "(" . json_encode($age) . ")";

?>

本地服务器: ./localhtml.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
      <script type="text/javascript" src=jquery.min.js"></script>
      <script type="text/javascript">
     jQuery(document).ready(function(){
        $.ajax({
             type: "get",
             async: false,
             url: "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998",
             dataType: "jsonp",

              //传递给请求处理程序或页面的,
             //用以获得jsonp回调函数名的参数名(一般默认为:callback)
             jsonp: "callback",

             //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,
             //也可以写"?",jQuery会自动为你处理数据
             jsonpCallback:"flightHandler",
             success: function(data){
             console.log('请求成功',data)
             },
             error:function(err){
             console.log('请求失败',err)

}

         });
     });
     </script>
     </head>
  <body>
  </body>
 </html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值