jsonP

json是一种数据格式jsonp是非正式传输协议

jsonp里传输的就是json的数据格式,只是在发送请求时多加一个参数,其值为回调函数。

后台程序在获得该回调函数后,把准备好的json数据拼接到回调函数里面


前台代码如下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-type" content="text/html;charset=utf-8"/>
</head>
<body>

    <script type="text/javascript">
    // 得到航班信息查询结果后的回调函数
    var flightHandler = function(data){
        alert('你查询的航班结果是:票价 ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 张。');
    };
    // 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码)
    var url = "http://192.168.1.173/remote.php?code=CA1998&callback=flightHandler";
    // 创建script标签,设置其属性
    var script = document.createElement('script');
    
    script.setAttribute('src', url);
    alert(script);
    // 把script标签加入head,此时调用开始
    document.getElementsByTagName('head')[0].appendChild(script); 
    </script>

</body>
</html>
后端的php代码如下:
<?php
if(isset($_GET['callback'])){
	$callback = $_GET['callback'];
	$code = $_GET['code'];
	
	$str = $callback.'({'.'\'code\':\''.$code.'\',\'price\':1789,})';
	echo $str;

}

注解:在客户端浏览器中通过js产生一个script元素:

var url = "http://192.168.1.173/remote.php?code=CA1998&callback=flightHandler";
var script = document.createElement('script');
script.setAttribute('src', url);
 // 把script标签加入head,此时调用开始
document.getElementsByTagName('head')[0].appendChild(script); 



这个<scirpt src='XXXXX'></script>中的src引用的是一个服务器端脚本(php echo的一个字符串),该字符串必须符合客户端javascript语法

服务器端脚本先获取get过来的callback参数XXX,然后以这个callback值作为客户端函数名XXX({json数据})

这样就会在客户端浏览器中调用客户端中的javascript函数了,并且这个javascript函数可以获取服务器端传递过来的数据({json数据}),解决了javascript跨域

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值