2012-06-26 46 views
20

我承認,我不知道我在做什麼。

我正在嘗試學習如何使用SignalR,並且我幾乎逐字地追蹤了各種示例,並且無法粘貼$ .connection未定義。我正在使用MVC 4.0,並嘗試使用nuget下載的signalR js文件或來自示例項目的文件。這些是我的腳本引用。

@Scripts.Render("~/Scripts/jquery-1.7.2.min.js") 
@Scripts.Render("~/Scripts/knockout-2.0.0.js") 
@Scripts.Render("~/Scripts/jquery.signalR.js") 
@Scripts.Render("~/signalr/hubs") 

腳本似乎加載 - 我甚至在他們開始時發出警報,但是$ .connection總是未定義的。在一個奇怪的事件中,我有一個不同的項目,我試圖使用不同的jQuery庫,它使用$。並且該對象也始終未定義。

我只是尋找任何可能的解釋,我可能做錯了什麼。首先十分感謝。

+0

我們怎麼幫助沒有絲毫痕跡碼? – Cranio

+3

你有沒有在頁面上包含兩次jQuery? – davidfowl

回答

8

我解決了這個問題。我知道我做了什麼,但我不知道爲什麼它確實起作用。

我在_Layout.cshtml視圖的頂部引用了主jQuery庫(版本1.7.2),但沒有引用任何其他jQuery腳本。我注意到,默認情況下,它在視圖的底部加載了

並且腳本部分位於該部分的下方。

@RenderSection("scripts", required:false) 

我進一步改變了我的腳本引用如圖所示,並在問題出我的腳本引用上方

@section scripts 
{  
    @Scripts.Render("~/Scripts/jquery.signalR-0.5.1.js") 
    @Scripts.Render("~/Scripts/jquery.color.js") 
    @Scripts.Render("~/signalr/hubs") 
    @Scripts.Render("~/Scripts/blasht.signalr.js") 
} 

包裝內對我的看法,使捆加載後,他們將包括放。我認爲我沒有加載所有必要的jQuery,因爲它現在可以工作。

現在,如果我能弄清楚這是如何適用於我的其他項目。

3

這個工作原因是因爲JavaScript文件的加載順序。如果您在加載jquery之前嘗試加載jquery.signalR-0.5.1.js,那麼您將面對未定義的$ .connection,因爲爲此註冊jquery應該先加載。在_Layout.cshtml模板腳本加載順序

@Scripts.Render("~/bundles/jquery") 

@RenderSection("scripts", required: false) 

所以裏面任何的你的意見,你可以在腳本部分加載signalr,這應該能正常運行。

44

今天我得到了同樣的問題。

您的答案指出我在正確的方向,因爲我有相同的腳本加載相同的設置。

我按照以下順序將所有腳本標記放在頁面頂部(頭部)。

  • JQuery的
  • SignalR
  • /signalr /集線器
  • 我的腳本。JS

當然並且,@ Layout.cshtml是如此周到地在<body>標籤的底部添加@Scripts.Render("~/bundles/jquery")

這是發生了什麼事。

在此配置中,當頁面加載時,它會按照它們指定的順序加載頭標記中的所有腳本。

所以它加載JQuery,然後SignalR,其中設置$.connection然後自動生成的集線器腳本,它設置$.connection.hubName,然後該網站的自定義腳本。

此時您的自定義代碼將運行。但你的代碼在某些時候,等待body.onloaddocument.onReady訪問$.connection

的時候此事件之前,該佈局模板增加了對你的身體標籤也下載並執行結束腳本包。這個包還有jQuery庫......它重置了$上的所有SignalR設置,現在你的$.connection不再被定義。

如何解決呢

易修復,確保你不加載JQuery的兩倍,SignalR之前和之後SignalR一次一次。我將所有的腳本都移動到了包之後,並解決了問題。這裏的最佳做法是使用模板提供的'腳本'部分。

@section scripts{ 
    @*/* load your scripts here. You can exclude jQuery, 
     coz it's already in the template */ *@ 
} 

所以這不是一個SignalR錯誤在所有...

這是2小時我的生活......我永遠不會回來......

希望這有助於。

+1

太棒了,謝謝。仍然不起作用,但它讓我更接近(在控制檯中沒有更多的錯誤)! – user1477388

+1

哦,上帝.....謝謝你的回答:) – Dzhambazov

+0

你的搖滾人...... !!它工作並保存了那些寶貴的「2小時的其他開發人員同樣的問題」:) – Kings

2

我有同樣的問題。 對我來說我已經在頁面中包含jquery 2次,後來在佈局中。 刪除其中一個修復了問題。

希望它可以幫助

0

這發生在我身上,因爲我動態加載jquery.signalR-1.1.4.js腳本之前加載~/signalr/hubs腳本。

當動態加載,沒有錯誤存在,但是如果我拿了~/signalr/hubs輸出並粘貼到我的Chrome瀏覽器開發工具,我收到一條錯誤消息VM1047:18 Uncaught Error: SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/hubs. at <anonymous>:18:15 at <anonymous>:300:2