2014-02-21 191 views
0

我有这个前端代码来尽快在sql表中更新表的更新。 但我找不到解决这个问题的方法。SignalR客户端undefined

Uncaught TypeError: Cannot read property 'client' of undefined

<script src="Scripts/jquery-1.6.4.min.js"></script> 
<script src="Scripts/jquery.signalR-2.0.2.min.js"></script> 
<script src="signalr/hubs"></script> 
<script> 
    $(function() { 
     // Proxy created on the fly 
     var job = $.connection.DataHub; 
     console.log(job); 
     // Declare a function on the job hub so the server can invoke it 
     job.client.displayStatus = function() { 
      getData(); 
     }; 

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

    function getData() { 
     var $tbl = $('#tblJobInfo'); 
     $.ajax({ 
      url: '../api/values', 
      type: 'GET', 
      datatype: 'json', 
      success: function (data) { 
       if (data.length > 0) { 
        $tbl.empty(); 
        $tbl.append(' <tr><th>ID</th><th>Titulo</th>/tr>'); 
        var rows = []; 
        for (var i = 0; i < data.length; i++) { 
         rows.push(' <tr><td>' + data[i].Id + '</td><td>' + data[i].titulo + '</td></tr>'); 
        } 
        $tbl.append(rows.join('')); 
       } 
      } 
     }); 
    } 
</script> 

这又如何解决呢?

回答

2

我想问题是你没有改变中心名称骆驼的情况。请看下图:

var job = $.connection.dataHub; 

如果使用HubName属性,没有名称变更为骆驼上的JavaScript客户端:

[HubName("DataHub")] 
public class DataHub: Hub 

此外,如果你正在使用ASP.NET MVC 4或5剃刀看来,使用波浪号指应用程序的根在你的代理文件参考:

<script src="~/signalr/hubs"></script> 
+0

我现在做了这个,但同样的问题 – Severiano

+0

@Severiano,看到我更新的答案。 – Lin

0

我们得到了同样的错误,但是,在我们的例子中,我们有Windows Server 2008的IIS 7的一个部署(和它的工作不埃罗rs)和另一个(相同的应用程序,相同的代码)在Windows Server IIS 8(引发与原始海报相同的错误)。

我们的解决方案是在IIS 8.

部署时修改web.config和在signalr /集线器位置部分中的“system.webServer”部分注释(注意system.webServer被注释)

<location path="signalr/hubs"> 
    <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
    <!--system.webServer> 
     <security> 
      <authorization> 
       <add accessType="Allow" users="*"/> 
      </authorization> 
     </security> 
    </system.webServer--> 
</location> 

这是原始的,它适用于IIS 7,但未能在IIS 8:

(注意system.webServer没有被注释掉)

<location path="signalr/hubs"> 
    <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
    <system.webServer> 
     <security> 
      <authorization> 
       <add accessType="Allow" users="*"/> 
      </authorization> 
     </security> 
    </system.webServer> 
</location>