作者fun4i0220 (嗯嗯搭啦)
看板Ajax
标题[问题] 跨网域问题 无法取得政府开放资料
时间Sat Apr 22 03:51:13 2017
最近在练习用 ajax 存取 json
程式码大概像是这样:
----------------------------------------
$.ajax({
url:
"
https://cloud.culture.tw/frontsite/trans/SearchShowAction.do?method=doFindTypeJ&category=3",
type: "GET",
dataType: 'json',
error: function(){
console.log("error");
},
success: function(data){
console.log("success");
console.log(data);
}
});
----------------------------------------
错误讯息如下:
XMLHttpRequest cannot load
https://cloud.culture.tw/frontsite/trans/SearchShowAction.do?method=doFindTypeJ&category=3.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查了一下大概知道是跨网域问题
看网路上的几个解法不外乎是 JSONP 和 CORS
但我的理解是,这两个方法都需要後端 API 本身的配合否则无法解决
纯前端的角色来看是否无法解决这个问题呢?
概念有些模糊,有什麽不对的地方或是更好的方法,还请各位指正
谢谢大家
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.177.226
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1492804276.A.086.html
1F:推 s25g5d4: 对,没办法解决,不然就同源政策不就没意义了 04/22 07:39
2F:→ ssccg: 就不能用ajax抓,通常API不会做成给任意网页直接存取 04/22 07:40
3F:推 tentenlee: 请问一下 後台api怎麽做到防其他网页call呀? 04/23 01:38
4F:推 tentenlee: 只找到去判断一些header去做,可是这些都可以自己改 04/23 01:41
5F:→ ssccg: 其他网页是指ajax的话,不用做什麽预设就不行了 04/23 02:03
6F:→ ssccg: 如果是任意client,只能做authentication或挡IP吧 04/23 02:03
7F:推 aznchat100: 其实chrome有CORS ext 练习时可以开起来玩玩 04/25 05:37
8F:推 visa9527: iframe是你的好朋友 04/25 10:40
9F:推 visa9527: 如果API那边没什麽检查机制,只要传对 GET 就能回应的话 04/25 10:42
10F:→ visa9527: 就create个iframe把网址用API参数带过去 04/25 10:42
11F:→ visa9527: 之後再parse iframe document内容转成XML或JSON 04/25 10:44
12F:→ ssccg: cross domain的iframe document内容是取不到的吧 04/25 11:44
13F:→ ssccg: 同源政策也包含不同源的frame不能直接互相存取 04/25 11:48