jsonp+php实现跨域

jsonp跨域原理

<script>标签没有跨域限制

json和jsonp的区别

json是一种基于文本的数据交换方式,或者叫做描述数据的一种格式。

var person = {
    "name": "test",
    "age": "25",
    "sex": "男"
};
 
var data = [1, 2, 3, 4, 5];

而jsonp是一种非官方跨域数据交互协议,该协议允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住json数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
比如我在a.com的网站上引用了b.com的一个b.js,但这样跨域的引用并不会产生错误,说明调用js文件时不受跨域的影响。

<script type="text/javascript" src="http://www.b.com/b.js"></script>

那么我们在b.js里添加如下代码,看看是否能够执行

alert("I from b");

确定是可以执行。

请求方式

如果使用jsonp进行跨域请求,所用到的请求方式只能是 get,在php后台接收不到$_POST的请求数据。

实例

jsonptest.html 页面主要代码

<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>  
            <script type="text/javascript">  
                $(function(){  
                      $.ajax({  
                           url : "http://ip/jsonpreturn.php",  // 远程IP地址或域名
                           dataType:"jsonp",  
                           data:{  
                               "name":"xiaoming",  
                               "pass":"123456"  
                           },  
                           type:"post",  // 就算使用post,在浏览器中也会变成get方式
                           jsonp:"callback",  
                           timeout: 5000,  
                           success:function(data){  
                                console.log(data); 
                           },  
                           error:function(XHR, textStatus, errorThrown){  
                               console.log('error: ' + textStatus);  
                               console.log('error: ' + errorThrown);  
                           }  
                      });  
                });  
            </script>  

jsonpreturn.php主要代码

<?php  
    $name = $_GET['name'];  // _POST接收不到数据
    $pass = $_GET['pass'];  
      
    $jsonp = $_GET['callback'];//get接收jsonp自动生成的函数名  
      
    $arr = array(  
        'name' => $name,  
        'pass' => $pass 
    );  
    echo $jsonp.'('. json_encode($arr). ')'; //jsonp函数名包裹json数据  
?>  

 

转载于:https://my.oschina.net/u/3460260/blog/1614744

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值