jsonp+ajax实现浏览器跨域通信

前端之家收集整理的这篇文章主要介绍了jsonp+ajax实现浏览器跨域通信前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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代码

<?PHP
	
	header('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":"http://www.example.com","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';

赶快试试吧

猜你在找的Json相关文章