JSONP

作者: __凌 | 来源:发表于2017-10-17 11:29 被阅读0次

同源:域名,协议,端口 相同。

跨域:只要协议、域名、端口有任何一个不同,都是不同的域,之间的请求就是跨域操作。

同源策略:(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功。

浏览器的同源策略会导致跨域,这里同源策略又分为以下两种:

DOM同源策略:禁止对不同源页面DOM进行操作。这里主要场景是iframe跨域的情况,不同域名的iframe是限制互相访问的。

XmlHttpRequest同源策略:禁止使用XHR对象向不同源的服务器地址发起HTTP请求。


跨域问题解决  --- JSONP(JSON with Padding)


No 1:JSONP:为了便于客户端使用数据,逐渐形成了一种非正式传输协议。

No 2:实现方法:通过动态创建script标签,然后利用src属性在远程服务器上设法把数据装进js格式的文件里进行跨域。

No 3:基本原理该:用户传递一个callback参数给服务端,服务端返回数据时将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

<head>

  <script type="text/javascript">

//得到结果后的回调函数

var search=function(data){

  alert('你查询的结果是:单价'+data.price+'元');

};

//提供jsonp服务的url地址

var  url="http://flightQuery.com/jsonp/flightResult.aspx?id=001&callback=search";

//创建script标签,设置其属性

var script=document.createElement('script');

script.setAttribute('src', url);

//把script标签加入head,此时调用开始

document.getElementsByTagName('head')[0].appendChild(script);

  </sctipt>
</head>

jQuery实现jsonp调用:

jQuery(document).ready(function(){

$.ajax({

   type:"get",

   async:false,

  url:"http://flightQuery.com/jsonp/flightResult.aspx?id=001",

  dataType:"jsonp",

   jsonp:"callback",

//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)

   jsonpCallback:"search",

//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据

    success:function(json){

     alert('您查询信息:单价:'+json.price+'元');

  },error:function(){

    alert('请求失败');

 }

});

});

jquery在处理jsonp类型的ajax时(虽然jquery也把jsonp归入了ajax,但其实它们真的不是一回事儿),自动帮你生成回调函数并把数据取出来供success属性方法来调用

相关文章

网友评论

      本文标题:JSONP

      本文链接:https://www.haomeiwen.com/subject/zkoruxtx.html