2012-06-26 71 views
1

我是新来的signalr。我创建了一个开箱即用的MVC 4.0应用程序,并在索引视图中连接了我的signalr JavaScript。当我单击注册或登录按钮时,signalr会引发JavaScript错误。SignalR投掷JavaScript错误

Unhandled exception at line 11, column 10700 in http://localhost:49172/Scripts/jquery.signalR- 0.5.1.min.js 

0x800a138f - Microsoft JScript runtime error: Unable to set value of the property 'src': object is null or undefined 

任何建议表示赞赏。

编辑:

这是我的代码的程度:

$(function() {  
    var blasht = $.connection.blashtHub;  
    blasht.addMessage = function (message) { 
     $('#messages').append('<li>' + message + ''); 
    };  

    $("#blashtIt").click(function() { 
     var control = $('#blashtText'); 
     var control2 = $('#hiddenUserId'); 
     // Call the chat method on the server 
     blasht.send(control2.val(), control.val()); 
     control.val(''); 
    }); 

    blasht.updateTopTen = function (message) { 
     //add code to update the top user's list 
    }; 

    // Start the connection 
    $.connection.hub.start(); 
}); 

如所建议予下降最小和此处在那里崩溃,在frame.sc = SRC;线。

reconnect: function (connection) { 
    var that = this; 
    window.setTimeout(function() { 
    var frame = connection.frame, 
    src = transportLogic.getUrl(connection, that.name, true) + "&frameId=" + connection.frameId; 
       connection.log("Upating iframe src to '" + src + "'."); 
       frame.src = src; 
      }, connection.reconnectDelay); 
     }, 

SignalR,不是我,正在调用这个重新连接函数。显然,这就是它如何维护与服务器的连接。

+1

你必须证明你的代码,特别是设置了'src'属性的代码,以及,让你无论是对象的代码设置'src'属性。 –

+0

这个特定的bug已修复,因此请升级SignalR :) – davidfowl

回答

0

从错误信息,而你不必表现出任何代码,我不得不猜测,你有代码看起来像这样:

foo.src = someValue; 

...其中foonullundefined。这就引起了问题为什么foonullundefined,但没有更多的上下文,这是不可能的说。通过使用IE8 +“F12开发工具”可以帮助您找出问题所在。


我猜测该行导致错误(更新代码被张贴后)frame.src = src;。重新格式化代码一致的缩进:

reconnect: function (connection) { 
    var that = this; 
    window.setTimeout(function() { 
     var frame = connection.frame, 
      src = transportLogic.getUrl(connection, that.name, true) + "&frameId=" + connection.frameId; 
     connection.log("Upating iframe src to '" + src + "'."); 
     frame.src = src; // <=== Presumably this is the line failing 
    }, connection.reconnectDelay); 
}, 

这样看来,作为延迟函数被调用的时候,connection.framenullundefined。所以你需要找出原因。我要做的第一件事是检查connection.frame是否为nullundefinedreconnect被调用时,或者只有在延迟函数运行后(例如,在此期间清除了某些内容,以及为什么)。

+0

Thanks T.J.但错误不在我的代码中,它在signalr的代码中。我可以展示我如何引用JavaScript文件,但没有其他显示。我希望有人遇到过这个问题。 –

+0

@DannyEllisJr:当然,你以某种方式触发SignalR代码? –

+0

正如上面所建议的那样,使用F12/IE9来弄清楚为什么你没有引入所有你认为自己或者到底发生了什么的JavaScript库。并放弃开发/调试.min。 – RickAndMSFT

9

的是“永远帧”的实现,这是IE9使用了一个在SignalR的当前版本中的错误: https://github.com/SignalR/SignalR/issues/446

一种解决方法是强制SignalR不使用永远帧传输(https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client)。 因此改变

$.connection.hub.start(); 

$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] }); 
+2

是的,这个bug已修复。所以只需更新你的脚本,它会正常工作。 – davidfowl