2012-09-12 17 views
7

stato alle prese con questo errore la pasta due ore ..

TypeError: $.connection is undefined 
[Break On This Error] 

var chatHubClient = $.connection.chatHub; 

qui è la mia Chat.cs (che si trova nella cartella di controllo - la mia ipotesi è questo è quello che sto facendo male, ma non riesco a trovare alcuna documentazione su dove metterlo o come instradarlo)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using SignalR.Hubs; 

namespace SingalrTest.Controllers 
{ 
    public class Chat 
    { 
     private readonly static Lazy<Chat> _instance = new Lazy<Chat>(() => new Chat()); 

     public static Chat Instance 
     { get { return _instance.Value; } } 
    } 

    [HubName("chatHub")] 
    public class ChatHub : Hub 
    { 
     private readonly int TimeoutInSeconds = 30; 
     private readonly Chat _chat; 

     public ChatHub() : this(Chat.Instance) { } 

     private ChatHub(Chat chat) 
     { 
      this._chat = chat; 
     } 

     public void Join(string channelName) 
     { 
      System.Diagnostics.Debug.WriteLine("Someone joined " + channelName); 
     } 
    } 
} 

e alla fine, .. il potrebbe _Layout.cs.html

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <title>@ViewBag.Title - My ASP.NET MVC Application</title> 
     <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
     <meta name="viewport" content="width=device-width" /> 

     @Styles.Render("~/Content/css") 
     @Scripts.Render("~/bundles/modernizr") 
     @Scripts.Render("~/Scripts/jquery-1.8.1.js") 
     @Scripts.Render("~/Scripts/jquery.signalR-0.5.3.js") 
     @Scripts.Render("~/signalr/hubs") 

     <script type="text/javascript"> 
      $(document).ready(function() { 
       // var chatHubClient = jQuery.connection.chatHub; 
       var chatHubClient = $.connection.chatHub; 

       $.connection.chatHub.start(function() { 
        chatHubClient.join('TEST'); 
       }); 
      }); 
     </script> 
    </head> 
    <body> 
    ... 
    </body> 
</html> 

E se visito il/signalr/hubs posso vedere che la fonte è generata correttamente. Quindi cosa mi manca?

+0

Sto avendo lo stesso problema. Per qualche ragione $ .connection non viene definita quando si verifica l'evento $ .ready. Ho risolto il problema eseguendo il mio codice inline anziché sull'evento pronto ... Non ho idea del perché scompaia però ... –

risposta

0

Secondo this, per la versione 0.5.3, è necessario modificare la sintassi di connessione:

var connection = $.hubConnection(); 

o direttamente il traffico verso un server secondario

var connection = $.hubConnection("http://localhost:58416/"); 

connettersi a hub:

var hub = connection.createProxy('your_hub_name'); 

E altre modifiche durante l'invio e la ricezione di messaggi

Spero che questo aiuto

8

potrebbe essere spostato su ...

Ma ecco la soluzione.

avete tutti i vostri script nell'ordine giusto nel tag head. Ma lo _Layout.cshtml dal modello di Visual Studio presenta le seguenti righe alla fine del tag del corpo.

@Scripts.Render("~/bundles/jquery") 
@RenderSection("scripts", required: false) 

Questo bundle è la libreria jQuery, che sovrascrive l'oggetto $ quando viene caricato. Quindi qualsiasi "cosa" su questa configurazione di SignalR viene ora sovrascritta e non accessibile.

usa semplicemente seguendo nella tua pagina.

@section scripts { 
    @* Load your scripts here. (and remove jQuery, coz it's already loaded) *@ 
} 

Spero che questo aiuti.

+0

fantastico, grazie mille. –

+0

jQuery verrà correttamente inserito anche se è stato caricato? Preferisco lasciare che il bundler carichi jQuery come parte del bundle e quindi rieseguire la roba signalR. –

+0

si. Devi solo caricare SignalR. e assicurati di caricarlo DOPO jQuery. (la sezione degli script viene eseguita dopo il caricamento di jQuery. Gli script in vengono eseguiti prima ... nella configurazione predefinita.) – Madushan