jsonp+php实现跨域

jsonp跨域原理javascript

<script>标签没有跨域限制php

json和jsonp的区别html

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

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文件时不受跨域的影响。jquery

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

那么咱们在b.js里添加以下代码,看看是否可以执行ajax

alert("I from b");

肯定是能够执行。json

请求方式跨域

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

实例app

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数据  
?>
相关文章
相关标签/搜索