跨域(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)";

原文地址:https://www.cnblogs.com/eye-color/p/6863706.html