通过GET方式来获取后台的json数据。
欢迎大神给建议!~~
前几天后台给了我一个接口,让我用GET方式来获取后台数据,看起来是件很简单不过的事情,但我在实际获取中才发现问题挺恼火的,为此纠结了好几天 ,在网上查阅了大量的资料,总算是解决了问题,今天借此机会总结下,如果你也遇到我这样的问题,可以按照此方法试试。
第一次用GET方式json类型来获取
代码如下:
$.ajax({
type:'GET',
url:'https://weixin-test-ziweigamepoch.c9users.io/api/users',
dataType:'json',
success:function(data){
},
error:function(jqXHR){
}
});
会出现以上图片中的报错:提示是因为跨域的问题。如果出现这个报错就说明后台没给你设置跨域,你可以直接找后台,因此我屁颠屁颠去找后台说理,人家说需要我自己来解决,好吧! 就这样又开始查资料...
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第二次用GET方式jsonp类型来获取
代码如下:
$.ajax({
type:'GET',
url:"https://weixin-test-ziweigamepoch.c9users.io/api/users",
dataType:'jsonp',
data:'',
jsonp:'callback',
success:function(result) {
console.log(result);
},
timeout:3000
});
网上说了一大堆用jsonp的方法跨域,我就各种试,结果还是拿不到,因为后台返回的数据是json格式,所有即使你用jsonp跨域成功了,回调里面也拿不到数据,后台又不给你改格式,然后继续查资料~~~~~
如上图只能在Network中看到后台数据,此处本人已经快崩溃了。
在不改动后台的基础下,前端究竟能不能用jsonp拿到json数据呢?
答案是肯定的。
ajax请求不同域名的页面时,由于浏览器安全限制是不允许请求的,发生错误。此时需要搭建服务器做代理捉取跨域页面,ajax请求自己建立的代理页面。如果你不想建立自己的代理服务,因为有时我根本就没打算涉及服务端任何代码,但是讨厌的浏览器的同源策略,阻止了我们的ajax调用。下面是本人找到的办法:
$.ajax({
type:'GET',
url:"http://query.yahooapis.com/v1/public/yql",
dataType:'jsonp',
data: {
q: "select * from json where url=\'https://weixin-test-ziweigamepoch.c9users.io/api/users\'",
format: "json"
},
success:function(d) {
var dada = d.query.results.json.json;
console.log(dada);
for(var i in dada) {
}
},
});
JSONP跨域接口在线代理API完美解决
想详细了解:http://www.w3dev.cn/article/20130319/query.yahooapis.com-v1-public-yql-JSONP-API-introduction.aspx
这种采用在线代理的做法实现简单,不需要自己搭建额外的代理(服务器)或其他操作。
但是,它也有缺点,比如
- 性能严重依赖外部代理服务器
- 外部代理服务器可以截获你所发送、接收的所有数据,即便你访问的原网址是 https 加密连接。
所有大家也根据实际情况而选择~!