2012-09-12 37 views
7

Được vật lộn với lỗi này dán hai tiếng đồng hồ ..

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

var chatHubClient = $.connection.chatHub; 

đây là Chat.cs của tôi (đó là trong thư mục controller - tôi đoán là đây là những gì tôi đang làm sai, nhưng tôi không thể tìm thấy bất kỳ tài liệu về nơi để đặt nó hoặc làm thế nào để định tuyến nó)

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

Và cuối cùng, .. các thể _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> 

Và nếu tôi truy cập vào/signalr/hub, tôi có thể thấy rằng nguồn được tạo chính xác. Vì vậy, những gì biggy tôi mất tích?

+0

Tôi gặp vấn đề tương tự. Đối với một số lý do $ .connection không được định nghĩa khi sự kiện $ .ready xảy ra. Tôi đã sửa lỗi bằng cách chạy mã nội tuyến thay vì trên sự kiện sẵn sàng ... Tôi không biết tại sao nó biến mất ... –

Trả lời

0

Theo this, cho phiên bản 0.5.3, bạn phải thay đổi cú pháp kết nối:

var connection = $.hubConnection(); 

hoặc trực tiếp giao thông tới máy chủ phụ

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

kết nối với trung tâm:

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

Và một số thay đổi khác khi gửi và nhận tin nhắn cũng như

Hope trợ giúp này

8

bạn có thể đã chuyển sang ...

Nhưng đây là giải pháp.

bạn có tất cả các tập lệnh của mình theo đúng thứ tự trong thẻ đầu. Nhưng _Layout.cshtml từ mẫu Visual Studio có các dòng sau ở cuối thẻ body.

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

Gói này có thư viện jQuery, ghi đè đối tượng $ khi tải. Vì vậy, bất kỳ 'công cụ' nào trên thiết lập này bởi SignalR hiện đã bị ghi đè và không thể truy cập được.

chỉ cần sử dụng sau trong trang của bạn.

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

Hy vọng điều này sẽ hữu ích.

+0

tuyệt vời, cảm ơn rất nhiều. –

+0

jQuery có được đóng gói đúng cách mặc dù khi được tải không? Tôi muốn cho phép trình nạp thêm jQuery như một phần của gói và sau đó chạy lại công cụ signalR. –

+0

có. Bạn chỉ phải tải SignalR. và chắc chắn rằng bạn tải nó SAU KHI jQuery. (phần kịch bản chạy sau khi tải jQuery. các script trong chạy trước .. trong cấu hình mặc định.) – Madushan