1、什么是JSONP?
        JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。
        2、JSONP有什么用?
        由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源,为了实现跨域请求,可以通过script标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数,从而解决了跨域的数据请求。
        3、如何使用JSONP?
        下边这一DEMO实际上是JSONP的简单表现形式,在客户端声明回调函数之后,客户端通过script标签向服务器跨域请求数据,然后服务端返回相应的数据并动态执行回调函数。
        客户端JS代码在jQuery中的实现方式:
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  $.ajax({
    url:"http://www.php520.cn/services.php",
    dataType:'jsonp',
    data:'',
    jsonp:'callback',
    success:function(result) {
      for(var i in result) {
        alert(i+":"+result[i]);//循环输出a:1,b:2,etc.
      }
    },
    timeout:3000
  });
</script>

服务端PHP代码(services.php):

<?php
	//服务端返回JSON数据
	$arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
	$result=json_encode($arr);

	//动态执行回调函数
	$callback=$_GET['callback'];
	echo $callback."($result)";

        Jsonp原理:

        首先在客户端注册一个callback, 然后把callback的名字传给服务器。
        此时,服务器先生成 json 数据。
        然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp。
        最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
        客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里(动态执行回调函数)。
        主要提示:
        JSONP 是构建 mashup 的强大技术,但不幸的是,它并不是所有跨域通信需求的万灵药。它有一些缺陷,在提交开发资源之前必须认真考虑它们。
        第一,也是最重要的一点,没有关于 JSONP 调用的错误处理。如果动态脚本插入有效,就执行调用;如果无效,就静默失败。失败是没有任何提示的。例如,不能从服务器捕捉到 404 错误,也不能取消或重新开始请求。不过,等待一段时间还没有响应的话,就不用理它了(未来的 jQuery 版本可能有终止 JSONP 请求的特性)。
        第二,JSONP 的另一个主要缺陷是被不信任的服务使用时会很危险。因为 JSONP 服务返回打包在函数调用中的 JSON 响应,而函数调用是由浏览器执行的,这使宿主 Web 应用程序更容易受到各类攻击。如果打算使用 JSONP 服务,了解它能造成的威胁非常重要。