在jquery中使用jsonp跨域请求

来源:互联网 发布:泰伦斯琼斯数据 编辑:程序博客网 时间:2024/06/06 09:58

1.什么是同域

同协议  && 同域名 && 同端口

2.什么是跨域

非同域就是跨域

3.浏览器禁止跨域访问(同域策略)

4.<script>标签的src属性不受同域策略的限制,在你自己的工程中使用下面的code引入一段script脚本也是完全没有问题的

 <script type="text/javascript" src="http://static.blog.csdn.net/scripts/jquery.js"></script>

5.根据第4条我们可以这样

 

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /><script type="text/javascript">    function jsonpCallback(result) {        //alert(result);        for(var i in result) {            alert(i+":"+result[i]);//循环输出a:1,b:2,etc.        }    }    var JSONP=document.createElement("script");    JSONP.type="text/javascript";    JSONP.src="http://crossdomain.com/services.php?callback=jsonpCallback";    document.getElementsByTagName("head")[0].appendChild(JSONP);</script>


代码的后4行是动态的创建一个<script>标签并添加到head中,其中src指向一个跨域的访问,至于src中的querystring是需要注意的,callback是你需要在后台获取的参数,然后返回的内容需要写成这样jsonpCallback(你需要的json格式数据)以java为例后台关键代码如下:

PrintWriter pw = response.getWriter();String callback = request.getParameter("callback");pw.write(callback+"("+json+")");

其中的json就是你组织好的json格式的数据,这样做的结果就相当于从后台返回了一行js代码,代码的内容是调用jsonpCallback方法,而在页面中恰好就定义了这个方法,所以就直接跳到function jsonpCallback(result) 方法体中去执行相应的代码。

这个就是jsonp的原理了

6.jquery只不过是对此过程进行了封装而已,如何在jquery中使用jsonp呢?关键代码如下:

<script type="text/javascript">      $.ajax({          url:"http://crossdomain.com/services.php",          dataType:'jsonp',          data:'',          jsonp:'callback',          success:function(result) {         },          timeout:3000     });  16.</script>  
只需要注意两个地方就可以了
1.dataType:'jsonp' 返回值类型为jsonp而不是json
2.jsonp:'callback' 用于在后台获取回掉函数(String callback = request.getParameter("callback");),函数的名字由jquery生成可能是这个样子json12423534543_46534653,自己也可以调试着看一下
其他的部分和利用ajax发送异步请求基本是一致的


0 0
原创粉丝点击