iT邦幫忙

1

Ajax 跨網域

  • 分享至 

  • xImage

工作遇到要能夠查詢各公司統編上網找到 商工行政資料開放平台的API
http://data.gcis.nat.gov.tw/od/rule#6BBA2268-1367-4B42-9CCA-BC17499EBE8C

用Ajax去Get Json資料時,在開發者模式下可以看到有Response資料,但是Ajax卻是error
,請教一下該怎麼修改?/images/emoticon/emoticon02.gif

https://ithelp.ithome.com.tw/upload/images/20190724/20115485rwaOxVxK6b.png

Header
https://ithelp.ithome.com.tw/upload/images/20190724/201154853mwSjbHTqV.png

console
https://ithelp.ithome.com.tw/upload/images/20190724/20115485pOxevRqzAE.png

var params = {
$format: 'json',
$filter: 'Company_Name like 台灣積體電路製造股份有限公司 and Company_Status eq 01',
$skip: 0,
$top: 100
};


$.ajax({
    url: "http://data.gcis.nat.gov.tw/od/data/api/6BBA2268-1367-4B42-9CCA-BC17499EBE8C?callback=?",
    method: "GET",
    data: params,
    crossDomain: true,
    dataType: 'jsonp',
    beforeSend: function(request) {
    request.setRequestHeader("Access-Control-Allow-Origin", "*");
},
success: function(data) {
    console.log(data);
},
error: function(result) {
    console.log(result);
}
});
淺水員 iT邦大師 6 級 ‧ 2019-07-24 12:42:52 檢舉
`filter=Company_Name like 台灣積體電路製造股份有限公司 and Company_Status eq 01`
覺得政府機關的 API 有點可怕,這該不會有 SQL 注入的風險?
froce iT邦大師 1 級 ‧ 2019-07-24 15:14:10 檢舉
應該會禁用關鍵字「吧」...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
8
dragonH
iT邦超人 5 級 ‧ 2019-07-24 10:49:52
最佳解答

codepen (jquery)

codepen (axios) (私心推薦/images/emoticon/emoticon50.gif

最省事又不想用後端的

用 cors anywhere

https://cors-anywhere.herokuapp.com/

然後你確定你要連的這 api

有支援 jsonp?

看更多先前的回應...收起先前的回應...
fillano iT邦超人 1 級 ‧ 2019-07-24 11:10:31 檢舉

他的dataType不應該是jsonp,cors header也不是這樣用XD

dragonH iT邦超人 5 級 ‧ 2019-07-24 11:17:03 檢舉

對阿XD/images/emoticon/emoticon37.gif

火爆浪子 iT邦研究生 1 級 ‧ 2019-07-24 12:06:57 檢舉

請問 axios 是哪來的高科技,好像在 vue 有看過

dragonH iT邦超人 5 級 ‧ 2019-07-24 12:11:53 檢舉

小松菜奈

axios

就是另一個可以發 http request 的 lib

其中一個優點就是

前後端都可以用

你在 vue 看到他

我想是因為

vue 不太會用到 jquery 的 selector

所以單純要發 http request 的話

就直接用 axios 了

火爆浪子 iT邦研究生 1 級 ‧ 2019-07-24 12:19:17 檢舉

了解

asd831012 iT邦新手 5 級 ‧ 2019-07-24 13:06:14 檢舉

感謝大大,前端很不熟悉

1

一般如果發生了 Ajax跨網域的請求問題,我都會改用curl的方式處理。
然後ajax我自已寫好curl的後端應用。讓它變成不是跨網域就行了。

畢竟跨網域的限制是瀏覽器的限制規則。

asd831012 iT邦新手 5 級 ‧ 2019-07-24 13:09:36 檢舉

感謝大大,我其實也有想過後端直接寫個web Service去爬資料,可惜只能給一個正解。

正解是誰無所謂,反正不是靠這吃飯的。

原則上像這種有額外轉向的網址我並不太會建議使用。
當然了,如果今天你無後端程式可以跑的情況下。也只能勉強用一下別人的後端了。

不過最好還是用自已寫的會比較安全點。免得哪天對方掛了還是怎麼了不能用,要不然就是給你回傳一個啥鬼的東西。到時哭都來不及了。

淺水員 iT邦大師 6 級 ‧ 2019-07-24 13:40:04 檢舉

另一個考量的點是,自己用後端去爬資料,伺服器狀況是自己掌握的。
用 cors anywhere 的話,必須確認對方的伺服器能穩定運作。
(發完才發現跟上面重複了)

0
甲土豆
iT邦新手 5 級 ‧ 2019-07-24 16:01:28

使用 websocket

看更多先前的回應...收起先前的回應...
dragonH iT邦超人 5 級 ‧ 2019-07-24 18:54:30 檢舉

/images/emoticon/emoticon16.gif

Homura iT邦高手 1 級 ‧ 2019-07-25 10:00:22 檢舉

這回答.../images/emoticon/emoticon16.gif

甲土豆 iT邦新手 5 級 ‧ 2019-07-25 10:43:45 檢舉

幹嘛呢,這表情,我回答錯了喔,如果錯了還請糾正

Ryan Lee iT邦新手 4 級 ‧ 2019-07-25 17:27:03 檢舉

他是要去接第三方走 http 的 API,然後遇到跨網域的問題(瀏覽器安全機制),和 websocket 沒什麼關係(?

0
I code so I am
iT邦高手 1 級 ‧ 2019-07-25 09:26:23

我使用 Fiddler 測試,得到錯誤訊息:非授權介接之IP(2001:b011:1003:1cc6:2cc4:1f3c:114e:e08f),請查明後繼續。
https://ithelp.ithome.com.tw/upload/images/20190725/2000197671uqbuRqwt.png

dragonH iT邦超人 5 級 ‧ 2019-07-25 10:08:05 檢舉

他是有說有用白名單管控

但是不知道為什麼可以直連/images/emoticon/emoticon19.gif

我要發表回答

立即登入回答