问一个关于 JSON 跨域请求的问题

2014-06-09 20:37:27 +08:00
 xia0chun
各位好,又来提问了
想用 @RelativeLayout 提供的“榨干百度网盘计划”,构造好URL之后,直接在浏览器里访问是可以的,例如 http://daimajia.duapp.com/baidu/?url=http://pan.baidu.com/s/1bn7tXHd
http://bcs.duapp.com/wxtuku/9ELoK8ffy8.jpg

我现在想用js来获取并解析这段JSON,试了好几个方法都不行,想请哪位好心给讲一下。

我从网上找了一段jQuery跨域请求JSON的例子,这个例子是可以请求到JSON数据:
https://gist.github.com/xia0chun/4646daf59f089558c320

然后我依葫芦画瓢修改了一下,就无法返回数据:
https://gist.github.com/xia0chun/6222b37cd8c50219fe37

请问这是什么原因?谢谢
3595 次点击
所在节点    问与答
17 条回复
jsonline
2014-06-09 20:48:52 +08:00
它没跨域,你跨域了。
JSON 无法跨域用 ajax 请求,除非加了 CORS 头。
JSONP 可以做到,但前提是该域名有提供 JSONP 接口。
Chrome App 里的 JS 可以随便跨域。
switch
2014-06-09 20:59:04 +08:00
http://daimajia.duapp.com/baidu
这个 app 是你的吗?如果是就把返回的 JSON 方式改成 JSONP 方式就可以了。
learnshare
2014-06-09 21:02:04 +08:00
你所请求的资源和 HTML 不在同域名同端口的服务器下,就是跨域了。出于安全考虑,浏览器不允许这么干。有三种方法可以解决:

1. 放到同域名同端口下(这个做不到);
2. 服务器端支持 JSONP 的请求方式(这个也做不到吧);
3. 服务器端配置 CORS(Cross-origin resource sharing)(这个还是做不到)。

可以尝试用后端语言来请求这个资源,并完成解析。后端没有跨域这种东西。
xia0chun
2014-06-09 21:07:52 +08:00
@switch 这个不是我的,是 @RelativeLayout 的,我想用他的服务端直接来获取下载地址的
xia0chun
2014-06-09 21:09:29 +08:00
@jsonline
@learnshare
谢谢二位的指点,不知道 @RelativeLayout 能否添加上JSONP支持呢,谢谢 :)

以上回复,感谢已发
learnshare
2014-06-09 21:14:20 +08:00
@xia0chun 不如你直接找他要代码咯
RelativeLayout
2014-06-09 21:15:18 +08:00
没问题 本来只计划客户端使用的,明天或者后天就搞定 搞定了来戳你
ChanneW
2014-06-09 21:16:00 +08:00
后端处理
xia0chun
2014-06-09 21:17:48 +08:00
@learnshare 刚才看了一下源码就托管在Github上的,不想自己在搭建了 :)
xia0chun
2014-06-09 21:19:16 +08:00
@RelativeLayout 真是太谢谢了 :)
xia0chun
2014-06-09 21:20:46 +08:00
@ChanneW 其实我想的是生成静态的下载页面,那样就可以放在Farbox或者Github或者qiniu上了,不需要动态语言的支持,嘿嘿。
ChanneW
2014-06-09 21:30:43 +08:00
@xia0chun 那就在你生成静态界面的时候转掉.
xia0chun
2014-06-09 21:32:23 +08:00
@ChanneW 貌似返回的下载地址不是固定的吧?所以没有办法直接写死在静态页面里
RelativeLayout
2014-06-11 20:12:52 +08:00
xia0chun
2014-06-11 22:34:25 +08:00
@RelativeLayout 亲,能否给我一个例子啊,搞了一晚上也没取到数据。抱歉我只会依葫芦画瓢 :(
RelativeLayout
2014-06-11 23:03:44 +08:00
@xia0chun 这两天有点小忙,稍等两天给你写个
xia0chun
2014-06-12 06:15:28 +08:00
@RelativeLayout 嗯嗯,好的。先谢谢了 :)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/116596

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX