iT邦幫忙

1

Chrome與 Ajax的相容性問題(本地URL)

  • 分享至 

  • twitterImage

敝人剛開始接觸Javacript,目前學習到Ajax的部分,我試做了一個非常基本的ajax非同步請求物件。
https://ithelp.ithome.com.tw/upload/images/20190828/20119141lpcPUl5L4Z.png
https://ithelp.ithome.com.tw/upload/images/20190828/20119141qDr2E26ZZG.png
但測試的結果:readystate為4,正常;但status卻一直是"0",上網查以後,原因很多,但我猜測是因為"跨域"的問題,想問問看是不是chrome與ajax相容性的問題,如果是那要怎麼解決?

ps.我也使用其他瀏覽器開html檔,在edge測試沒問題,可以正常顯示,但IE與Chrome就無法顯示。

看更多先前的討論...收起先前的討論...
小魚 iT邦大師 1 級 ‧ 2019-08-28 13:57:50 檢舉
我的問題是,
Ajax是長這樣嗎?
dragonH iT邦超人 5 級 ‧ 2019-08-28 14:04:43 檢舉
@小魚 大

如果你指的 Ajax

是指 jquery 的 ajax 的話

他其實只是把 XMLHttpRequest 包起來而已

https://github.com/jquery/jquery/blob/master/src/ajax/xhr.js

ajax 是個技術

不是名詞~
ccutmis iT邦高手 2 級 ‧ 2019-08-28 14:11:28 檢舉
AJAX即「Asynchronous JavaScript and XML」(非同步的JavaScript與XML技術),指的是一套綜合了多項技術的瀏覽器端網頁開發技術。Ajax的概念由傑西·詹姆士·賈瑞特所提出 (from wiki)
小魚 iT邦大師 1 級 ‧ 2019-08-28 14:49:28 檢舉
喔喔,
好吧,
這就是所謂吃米不知道米價吧...
甲土豆 iT邦新手 5 級 ‧ 2019-08-28 16:05:25 檢舉
版主是用,原生JS寫AJAX
老一輩人說 XHR 其實就是AJAX
因為需要 new XMLHttpRequest ==xhr
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
dragonH
iT邦超人 5 級 ‧ 2019-08-28 13:43:56
最佳解答

codepen

基本上跟你的 code 差不多

在 ie 跟 chrome

都可以正常運行

最大的差別應該就是 url

如果有跨域的情況

console 應該會有訊息

建議你看一下 browser 的 console

看有什麼有用的訊息


補充

如果 url 換成

https://github.com/

就會有跨域的情形

ie 還是可以正常運行

chrome 的 console 就會出現跨域的訊息

並且 readyState = 4, state = 0


跨域的問題應該快被問到爛了

解決方法

1 . 添加 header (但 request 的 server 要支援)

2 . 用 jsonp (適用json, 同上)

3 . 從後端送 (標準 sop)

4 . 用 cors-anywhere (玩票性質, 實務上不可能用這個)

https://cors-anywhere.herokuapp.com/{你要request 的 url}
看更多先前的回應...收起先前的回應...

那想問如果只是單純要request電腦上的檔案,要怎麼更改程式碼https://ithelp.ithome.com.tw/upload/images/20190828/20119141hFnuTO1UxC.png
這是我在chrome的console截下來的

因為不太懂ajax、跨域究竟是什麼,所以名詞上可能會亂用,造成誤解,真的非常抱歉...

dragonH iT邦超人 5 級 ‧ 2019-08-28 14:29:44 檢舉

你可以

1 .

弄個 static file server

2 .

用 filesystem like 的 lib 去 讀檔然後回傳(在後端操作)

.net 家族我不熟

就不給範例了/images/emoticon/emoticon33.gif

3 .

如果是一般的 web 專案

通常放在 public 裡

server 會幫你處理好剩下的事


跨域

簡單來說

就是

不是你的東西你不能拿

是基於安全性的產物

參考

Homura iT邦高手 1 級 ‧ 2019-08-28 14:45:25 檢舉

Chrome好像禁止直接對本地檔案AJAX....

dragonH iT邦超人 5 級 ‧ 2019-08-28 14:51:35 檢舉

看到Homura大 說才發現

所以你這不是 run 在 web server 上嗎 /images/emoticon/emoticon10.gif

froce iT邦大師 1 級 ‧ 2019-08-28 15:07:01 檢舉

Chrome好像禁止直接對本地檔案AJAX....

firefox也禁了,最近幾版的事。

fillano iT邦超人 1 級 ‧ 2019-08-29 10:20:14 檢舉

.aspx只能在IIS或IISExpress伺服器運行吧,發問者這樣request問題很大耶XD

另外,不要用xmlHttp這個全域變數比較好,程式改成呼叫createXMLHttpRequest()時回傳。AJAX有時會花一些時間,這樣發問者按鈕按兩次可能程式就炸了。

我要發表回答

立即登入回答