作者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://www.ptt.cc/bbs/Ajax/M.1492804276.A.086.html
推 s25g5d4: 對,沒辦法解決,不然就同源政策不就沒意義了 04/22 07:39
→ ssccg: 就不能用ajax抓,通常API不會做成給任意網頁直接存取 04/22 07:40
推 tentenlee: 請問一下 後台api怎麼做到防其他網頁call呀? 04/23 01:38
推 tentenlee: 只找到去判斷一些header去做,可是這些都可以自己改 04/23 01:41
→ ssccg: 其他網頁是指ajax的話,不用做什麼預設就不行了 04/23 02:03
→ ssccg: 如果是任意client,只能做authentication或擋IP吧 04/23 02:03
推 aznchat100: 其實chrome有CORS ext 練習時可以開起來玩玩 04/25 05:37
推 visa9527: iframe是你的好朋友 04/25 10:40
推 visa9527: 如果API那邊沒什麼檢查機制,只要傳對 GET 就能回應的話 04/25 10:42
→ visa9527: 就create個iframe把網址用API參數帶過去 04/25 10:42
→ visa9527: 之後再parse iframe document內容轉成XML或JSON 04/25 10:44
→ ssccg: cross domain的iframe document內容是取不到的吧 04/25 11:44
→ ssccg: 同源政策也包含不同源的frame不能直接互相存取 04/25 11:48