2013-04-03 79 views
4

我有一個jQuery CDN負載以下:jQuery的CDN沒有加載在localhost

<head> 
. 
. 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
</head> 

然後在身體,我有我的來源爲我的劇本

<body> 
. 
.<script src="app.js"></script> 
</body> 

這是所有地方,但是當我在瀏覽器中查看時,我在控制檯中不斷收到以下錯誤:

GET file://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js 
Uncaught ReferenceError: $ is not defined 

我假設這是說jQuery f unction「$ ...」未定義,因爲CDN的GET中存在錯誤,爲什麼會在本地發生?

+1

嘗試通過調試瞭解正在發生的事情。例如,如果您使用的是Chrome,請打開檢查員,轉至「網絡」標籤,然後刷新頁面。您將能夠看到您的請求是否失敗,等等。 – 2013-04-03 18:30:10

+0

@NickMitchinson它說狀態:(失敗)&類型:PENDING – FluxEngine 2013-04-03 18:39:07

回答

14

您實際上並不在本地主機上運行(http://localhost),而是在本地文件系統上運行(file:///path/to/whatever.html)。該協議被複制//鏈接到file://ajax.googleapis.com這當然不存在。

您應該在您的計算機上設置一臺服務器,以便您可以使用http協議訪問本地主機的實際。它還會帶來其他好處,因爲當頁面直接從文件系統加載時,瀏覽器在其他方面的行爲也有所不同。

+2

真的,如果CDN呼叫失敗,您應該嘗試回退到您自己的網絡服務器上的文件。哪一個可以和'file://一起工作,因爲你只需要回退 – Chad 2013-04-03 18:31:19

2

您是否嘗試在「src」屬性的開頭刪除「//」,而是使用「http://」?由於這些斜線,它可能會將「localhost」附加到URL的開頭。

+2

解決方案是正確的,但是解釋不是。 – 2013-04-03 18:31:26

+2

它會解決這個問題,但你會失去使用'/ /'URL(使用http或https自動取決於當前的URL使用)的好處。 – JJJ 2013-04-03 18:32:54

+0

我對此評論添加了正確的解釋:-) – 2013-04-04 08:54:07

0

我已經回答了How to use Bootstrap CDN?中的一個類似問題,並且正如Juhana所說,問題在於加載jQuery時丟失的協議。

無協議CDN在您使用http或https時起作用,因爲瀏覽器會將前綴添加到jQuery URL中。

但是,當使用本地html文件時,缺少的協議將是file:,瀏覽器將無法找到像file://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js未能加載它的jQuery。在這種情況下,您必須手動添加協議,如果您最終在線使用該頁面,這是一種可憐的行爲,因爲無協議URL更好,緩存更友好(http://encosia.com/cripple-the-google-cdns-caching-with-a-single-character/)。