2012-09-12 37 views
7

estado luchando con este error la pasta de dos horas ..

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

var chatHubClient = $.connection.chatHub; 

aquí es mi Chat.cs (que está en la carpeta del controlador - yo creo que es esto es lo que estoy haciendo mal, pero no puedo encontrar ninguna documentación sobre dónde ponerlo o cómo dirigirlo)

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); 
     } 
    } 
} 

Y por último, la .. podría _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> 

Y si visito/signalr/hubs puedo ver que la fuente se ha generado correctamente. Entonces, ¿qué biggy me estoy perdiendo?

+0

Estoy teniendo el mismo problema. Por algún motivo, $ .connection no se define cuando ocurre el evento $ .ready. Lo arreglé de alguna manera al ejecutar mi código en línea en lugar de en el evento listo ... No tengo ni idea de por qué desaparece ... –

Respuesta

0

Según this, para la versión 0.5.3, usted tiene que cambiar la sintaxis de conexión:

var connection = $.hubConnection(); 

o dirigir el tráfico a un servidor secundario

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

conectar al cubo:

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

Y algunos cambios más al enviar y recibir mensajes también

Esperanza esta ayuda

8

que puede haber movido ...

Pero aquí está la solución.

tiene todas las secuencias de comandos en el orden correcto en la etiqueta de la cabeza. Pero el _Layout.cshtml de la plantilla de Visual Studio tiene las siguientes líneas al final de la etiqueta de cuerpo.

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

Este paquete tiene la biblioteca jQuery, que sobrescribe el objeto $ cuando se carga. Entonces cualquier 'cosa' en esta configuración por SignalR ahora se sobrescribe y no es accesible.

simplemente use lo siguiente en su página.

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

Espero que esto ayude.

+0

increíble, muchas gracias. –

+0

¿Sin embargo, jQuery se incluirá correctamente cuando está cargado? Prefiero dejar que el bundler cargue jQuery como parte del paquete y luego volver a ejecutar el material de signalR. –

+0

sí. Solo tiene que cargar SignalR. y asegúrese de cargarlo DESPUÉS de jQuery. (La sección de scripts se ejecuta después de cargar scripts de jQuery. en se ejecuta antes ... en la configuración predeterminada). – Madushan

Cuestiones relacionadas