跨域(jsonp)方法
使用JSON的优点在于:
比XML轻了很多,没有那么多冗余的东西。
JSON也是具有很好的可读性的,但是通常返回的都是压缩过后的。不像XML这样的浏览器可以直接显示,浏览器对于JSON的格式化的显示就需要借助一些插件了。
在JavaScript中处理JSON很简单。
其他语言例如PHP对于JSON的支持也不错。
JSON也有一些劣势:
JSON在服务端语言的支持不像XML那么广泛,不过JSON.org上提供很多语言的库。
如果你使用eval()来解析的话,会容易出现安全问题。
尽管如此,JSON的优点还是很明显的。他是Ajax数据交互的很理想的数据格式
写法一:
function jsonpCallback(jsonpdata){
for(var i in jsonpdata){
console.log(jsonpdata[i]);
}
}
var JSONP = document.createElement('script');
JSONP.type = 'text/javascript';
JSONP.src = 'http://***/**.php?callback=jsonpCallback';
写法二:
<script type="text/javascript">
function jsonpCallback(jsonpdata){
for(var i in jsonpdata){
console.log(jsonpdata[i]);
}
}
</script>
<script type="text/javascript" src=:"http://***/**.php?callback=jsonpCallback"></script>
写法三:
//jquery跨域
$.getJSON("http://***/**.php?callback=?",function(jsondata){
for(var i in jsondata){
console.log(jsondata[i]);
}
})
写法四:
$.ajax({
url:'http://***/**.php?callback',
dataType:'jsonp',
data:'',
jsonp:'callback',
success:function(jsondata){
for(var i in jsondata){
console.log(jsondata[i])
}
},
timeout:1000
})
写法五:
$.get('http://crossdomain.com/services.php?callback=?',
{name: encodeURIComponent('tester')},
function (json) {
for(var i in json)
console.log(i+":"+json[i]);
}, 'jsonp');
<?php
服务端返回JSON数据
$arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
$result=json_encode($arr);
echo $_GET['callback'].'("Hello,World!")';
echo $_GET['callback']."($result)";
动态执行回调函数
$callback=$_GET['callback'];
echo $callback."($result)";