>

获取跨域json数据工具,学习笔记

- 编辑:至尊游戏网站 -

获取跨域json数据工具,学习笔记

JSONProxy – 获取跨域json数据工具

2015/07/10 · JavaScript · JSON, JSONProxy

原文出处: 韩子迟   

JSONProxy是一款很好的获取json数据的代理网站,“Enables cross-domain requests to any JSON API”。当你苦于无法跨域获取json数据时,不妨一试,说不定能事半功倍。

比如这位朋友,想通过ajax获取必应的每日一图的url(是否可以通过ajax获取“Bing每日一图”?)很显然,这个ajax是跨域的,直接获取会因为跨域报错;服务端也肯定不会有对你本地localhost的“Access-Control-Allow-Origin”的设置,所以CORS策略也是不行的;因为是个json数据,没有方法名包裹,所以jsonp也是不行。楼主暂时还没接触过其他的跨域方法,如果要我去获取url,只能通过服务端的代码,服务端去获取json数据,然后index页面去ajax请求服务端获取的json数据(此时index页面和服务端同源),代码量增加,而要做的仅仅只是获取一个json数据啊!这时JSONProxy就帮你做好了服务端的工作,是不是很爽!

跨域:掘金地址——

Easy: JSONP

原生的JavaScript:

XHTML

<script> function myCallback(data){ console.log(data); } </script> <script src=";

1
2
3
4
5
6
<script>
  function myCallback(data){
    console.log(data);
  }
</script>
<script src="https://jsonp.afeld.me/?callback=myCallback&url=http://jsonview.com/example.json"></script>

myCallback函数里的data就是返回的json数据了。很显然,服务器会帮你去请求你需要的json数据,然后包裹在你设置的回调函数名中,这时要注意的代码中的红色两处要保持一致,url后跟的就是需要的json数据地址。

当然JQuery封装好的方法更加简单:

XHTML

<script> $.getJSON('', function(data){ console.log(data); }); </script>

1
2
3
4
5
<script>
  $.getJSON('https://jsonp.afeld.me/?callback=?&url=http://jsonview.com/example.json', function(data){
    console.log(data);
  });
</script>

另一篇学习地址:

Easier: Cross-domain AJAX (CORS)

比jsonp更简单的方法是CORS(好吧,也没简单到哪去啊…)

XHTML

<script> $.get('', function(data){ console.log(data); }); </script>

1
2
3
4
5
<script>
  $.get('https://jsonp.afeld.me/?url=http://jsonview.com/example.json', function(data){
    console.log(data);
  });
</script>

这回是真正地发送了ajax请求了,为什么跨域了还能请求?因为服务端设置好了。

图片 1

而请求的json数据也是服务端帮你获取的。也就是说,客户端发送请求,服务端解析请求的url,然后服务器作为代理发送http请求去请求json数据(这时不存在客户端跨域),再返回给客户端作为回调的参数。

讲的比较细:
跨域笔记
    有些东西不要太较真,因为没啥用

Easiest: jQuery Plugin

最简单的,我怎么感觉越来越复杂了…

略…

总结,因为要用第三方的服务器,所以既耗时又有不确定因素(比如服务器挂了),不合适用在真正项目中,自己玩玩尚可。

1 赞 收藏 评论

图片 2

    jsonp和cors知道就好,其他的了解一下就好
  同源:是指同域名(主域名与二级域名,即子域名),同协议,同端口。是浏览器的一种最核心最基本的安全策略。

    1."同源策略",即同域名(domain或ip)、同端口、同协议的才能互相获取资源,而不能访问其他域的资源。

图片 3
    2.jsonp跨域方式,就是利用script的src来变相发送get请求,在链接里会发送一个函数名,而json数据作为
函数的参数被回调函数传递过来再解析应用。

//据研究:<script>、<a>、<img>、<iframe>等标签可以实现跨域,因为有src(a的href),可以获取外域的信息,src属性不受同源策略的限制,可以获取任何服务器上的脚本并执行。
    3.jsonp用jq实现,有两个方法:$.getJSON 和 $.ajax
//callback后面的?会由jquery自动生成方法名
$.getJSON('
    console.log(data.msg);
});
还有一种更常用的是:$.ajax,只要制定datatype为jsonp即可:
$.ajax({
    url: '
    dataType:‘jsonp’,
    jsonpCallback:‘demo’,//可省略
    success:function(data){
      console.log(data.msg);//msg是json数据中的一个name。以后可以是任何其他
    }
});
    
    4.jsonp缺点:
    ·没有关于调用错误的处理函数,失败会以浏览器默认方式处理
    ·只支持get请求。因此安全性不高
    5.json优点:支持老浏览器兼容,ie8以下也可以。
    6.CORS方式,针对高级浏览器。
通过修改document.domain为基础域名的方式来进行通信,但要注意协议和端口也必须相同、
    7.每个iframe都有包裹他的window对象,而这个window是最外层窗口的子对象,所以,window.name属性就可以被共享。
    8.CORS:跨域资源共享,w3c标准,支持兼容ie8,(IE8和IE9需要使用XDomainRequest对象来支持CORS)。主流的跨域解决方案
    9.CORS的核心思想是通过一系列新增的HTTP头信息来实现服务器和客户端之间的通信。【所以,需要服务端做好相应配置来配合前端】
    10.Origin头部:包含 请求页面的源信息(协议、域名和端口)。作用是让服务器根据这个头部信息来决定是否给予响应。
    11.Access-Control-Allow-Origin:请求可以接受时:服务器就会返回信息,在其头部中:发相同的对应的源信息(如果是公共资源,就发*。大部分情况,大家都喜欢直接写成*返回,*表示任意外域资源都可以访问,但这样安全性不高。)
    12.如果没有头部,或头部信息源不匹配,就会返回错误驳回请求。
    13.请求和响应都不包含cookie信息

本文由软件综合发布,转载请注明来源:获取跨域json数据工具,学习笔记