[問題] 跨網域問題 無法取得政府開放資料

看板Ajax作者 (嗯嗯搭啦)時間7年前 (2017/04/22 03:51), 編輯推噓6(607)
留言13則, 5人參與, 最新討論串1/2 (看更多)
最近在練習用 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

04/22 07:39, , 1F
對,沒辦法解決,不然就同源政策不就沒意義了
04/22 07:39, 1F

04/22 07:40, , 2F
就不能用ajax抓,通常API不會做成給任意網頁直接存取
04/22 07:40, 2F

04/23 01:38, , 3F
請問一下 後台api怎麼做到防其他網頁call呀?
04/23 01:38, 3F

04/23 01:41, , 4F
只找到去判斷一些header去做,可是這些都可以自己改
04/23 01:41, 4F

04/23 02:03, , 5F
其他網頁是指ajax的話,不用做什麼預設就不行了
04/23 02:03, 5F

04/23 02:03, , 6F
如果是任意client,只能做authentication或擋IP吧
04/23 02:03, 6F

04/25 05:37, , 7F
其實chrome有CORS ext 練習時可以開起來玩玩
04/25 05:37, 7F

04/25 10:40, , 8F
iframe是你的好朋友
04/25 10:40, 8F

04/25 10:42, , 9F
如果API那邊沒什麼檢查機制,只要傳對 GET 就能回應的話
04/25 10:42, 9F

04/25 10:42, , 10F
就create個iframe把網址用API參數帶過去
04/25 10:42, 10F

04/25 10:44, , 11F
之後再parse iframe document內容轉成XML或JSON
04/25 10:44, 11F

04/25 11:44, , 12F
cross domain的iframe document內容是取不到的吧
04/25 11:44, 12F

04/25 11:48, , 13F
同源政策也包含不同源的frame不能直接互相存取
04/25 11:48, 13F
文章代碼(AID): #1O-cAq26 (Ajax)
文章代碼(AID): #1O-cAq26 (Ajax)