独角兽企业重金招聘Python工程师标准>>>
Ajax/XDomainRequest 网络跨域访问控制
jsonp是一种技术手段而不是一种协议,也不是json数据。
<scripttype="text/javascript">varjsonp_callback=function(responseData){console.log(responseData);};</script>
这是js部分
同样使用 iframe或者<script>来访问
<scripttype="text/javascript"src="http://hostname:[port]/path/test.php?callback=jsonp_callback"></script>
php端代码
<?phpheader('text/html;charset=utf-8');$clientCallback=isset($_GET['callback'])?$_GET['callback']:'';$data=array('name'=>'zhangsan','gender'=>'male','age'=>20);//注意,一定要输出到页面echo$clientCallback.'('.json_encode($data).')';?>
测试一下
--------------------------------------------------------------------------------------------
以上方法属于直接访问的跨域通信,而在一些应用程序中,使用ajax+jsonp的进行跨域通信.
<scripttype="text/javascript"src="/js/jquery-1.4.1.min.js"></script><scripttype="text/javascript">$(document).ready(function(){$.ajax({url:'http://192.168.121.15/test_json.php',dataType:"jsonp",jsonp:"jsonpcallback",success:function(data){console.log(data);},error:function(data){console.log(data);},headers:{//这里的headers是非必须的,可以去掉"Access-Control-Allow-Origin":"","Access-Control-Allow-Headers":"X-Requested-With",'referece':'//设置足迹'Connection':'keep-Alive'//使用http_1.1}});});</script>
这里的ajax中使用了jsonp通信,需要设置数据类型 dataType=jsonp,jsonp的回调函数名称 jsonpcallback,注意,在js中不需要实现jsonpcallback,在jquery中会直接将 success:function(data){...}赋值给jsonpcallback,关于实现代码如下
//模拟一下哦,其中settings是xhr对象的配置参数var_callback=settings.success;url='http://192.168.121.15/test_json.php'+'?'+settings.jsonp+'=_callback';
赶快试试吧