php 返回json或者jsonp
2018年8月8日
接口开发中,现在交互很多时候开始使用json作为交互格式,因为json简单,易看,不像protobuf ,msgpack一样编成了一堆看不懂的小蝌蚪,当然也有他们的好处,速度更快,体积更小,另外也防止别人直接看到内容是啥!
这里要说的是json和jsonp格式的返回,先区分一下两个的不同,json是一种交互格式,它在不跨域的情况中交互,跨域的话,需要其他方式先破解调跨域的问题才能使用,如果不解决跨域的时候,我们这时候可以选择jsonp进行交互!
它俩有啥区别呢,看下格式你就懂了,jsonp是json的一种变种,为了实现跨域请求而生的,并且jsonp只能使用get请求,并且不能带本地客户端的cookie(实际上是浏览器限制不能带的)!
json的格式:{“a”:”b”,”c”:”d”}
jsonp的 格式: callback({“a”:”b”,”c”:”d”})
jsonp就多了callback,这个callback做什么的呢,这个就是页面中根据这个callback这个变量找到回调的函数,请求的时候带着这个,返回的时候也带着,返回后,页面js就调用这个callback,把结果响应到页面中!
jsonp实际上就是利用页面可以引入其它域名下的script的特性实现的!
php 如何让你的方法同时json和jsonp呢,其实很简单,看看代码如下
1 2 3 4 5 6 7 |
if (isset($_REQUEST['callback'])) { header('Content-Type: application/javascript;charset=utf-8'); exit($_REQUEST['callback'] . '(' . json_encode($info) . ')'); } else { header('Content-Type: application/json;charset=utf-8'); exit(json_encode($info)); } |
就是根据请求中是否有callback函数来判断的,如果有,我们就组装成jsonp的格式返回,没有,我们就按正常的json返回!callback这个是前端自动添加的(这里说的jquery用法),如果要是自己封装,就自己加上这个参数就行!
url中callback的格式是这样的:url?callback=sfajflajljlfjeoajowejrojofjoajofaojfojafaejfjngne
是key=>value的格式,callback后边一串在页面有这样的方法用于回调!当然你用jquery的话,这些都帮你封装好啦!