SignalR无法调用客户端监听功能
SignalR cannot invoke client listening function
所以我试图在一个项目中实现SignalR,我的代码如下:
MtHub.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
namespace HaldanMT
{
public class MtHub : Hub
{
public void RemoveResource(string message)
{
Clients.All.RemoveResource(message);
}
}
}
custom.js:
$(document).ready(function () {
$.connection.mtHub.client.removeResource = function (message) { // This is the client listener that will fire once the server invokes the message. This is not taking place
console.log("finished");
RemoveResource(message); // Function to be invoked once the signalR message has been received from the server
}
});
function RemoveSelf(message){
$.connection.hub.start()
.done(function () {
console.log("Fire SignalR");
$.connection.mtHub.server.removeResource(message); // Invoke the SingalR server function that would in turn invoke the client listening function
})
.fail(function () {
console.log("Error With SignalR");
});
}
function RemoveResource(message){
alert(message); // Display message
}
HTML: <button onclick="RemoveSelf('This is a message');">Click Me</button>
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/jquery.signalR-2.2.1.js"></script>
<script src="/signalr/hubs" type="text/javascript"></script>
<script src="~/Scripts/custom.js" type="text/javascript"></script>
现在…在按钮单击事件上触发了正确的函数,但没有调用对客户机的响应。如果我将SignalR调用js函数放在文档中,并由按钮的onclick事件包围,它就可以正常工作。但是我要求调用js函数的SignalR在函数RemoveSelf(message)
中被触发,因为其他事情需要在我的代码中发生。
所以我的问题是:SignalR是否要求服务器端代码通过元素侦听器调用,而不是在标准函数中调用。我发现的大多数例子都是使用基于jquery事件的侦听器,而不是传统的函数。
提前感谢。
SignalR服务器端代码不需要通过元素侦听器调用,但这是一把双刃剑,因为JavaScript本质上是处理事件的。
你的代码应该完全按照它的位置工作,但这是我的代码,它100%工作(我看不出我们的代码有什么不同)。可能是某个地方打错了):
[HubName("mtHub")]
public class MtHub : Hub
{
public void RemoveResource()
{
Clients.All.RemoveResource("yo");
}
}
JavaScript(这是client .js中的代码)
$(function() {
$.connection.mtHub.client.removeResource = function () {
alert("see it worked");
}
});
var CallIt = function() {
var connection = $.connection.mtHub;
$.connection.hub.start().done(function () {
alert("connected");
connection.server.removeResource().done(function () {
console.log("hi");
});
});
}
HTML
<h2 onclick="CallIt()">Fun Stuff</h2>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
<script src="~/Scripts/jquery.signalR-2.2.1.js"></script>
<script src="~/signalr/hubs"></script>
<script src="~/Scripts/client-side.js"></script>
[HubName("mtHub")]
public class MtHub : Hub
{
public void RemoveResource()
{
Clients.All.RemoveResource("yo");
}
}
$(function() {
$.connection.mtHub.client.removeResource = function () {
alert("see it worked");
}
});
var CallIt = function() {
var connection = $.connection.mtHub;
$.connection.hub.start().done(function () {
alert("connected");
connection.server.removeResource().done(function () {
console.log("hi");
});
});
}
<h2 onclick="CallIt()">Fun Stuff</h2>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
<script src="~/Scripts/jquery.signalR-2.2.1.js"></script>
<script src="~/signalr/hubs"></script>
<script src="~/Scripts/client-side.js"></script>
如果这不起作用,你能告诉我你得到了什么错误吗?
您的客户端方法名称的大小写错误,您使用的是"RemoveResource",它们应该是"RemoveResource"
这是不正确的:
function RemoveResource(message){
alert(message); // Display message
}
应该可以解决这个问题:
function removeResource(message){
alert(message); // Display message
}
相关文章:
- 如何在AngularJS中监听点击事件,而不是触摸事件
- BackboneJS-监听嵌套的模型更改
- 在Firefox restartless插件中,当一个新窗口打开时,我如何运行代码(监听窗口打开)
- 监听touchend有时会触发移动点击事件
- 使用ajax的Django jquery.如何让jquery监听id's生成的表单
- JQuery监听点击并使用点击元素发出警报's href
- jQuery有没有,或者有没有jQuery插件,内置了监听CSS3动画事件的功能(例如animationEnd)
- 如何让Google Maps API v3监听dragend事件并在投递时填充表单字段
- 如何在angular js中监听dom就绪事件
- Phonegap:监听页面并关闭InAppBrowser返回index.html的简单方法
- React鼠标事件在没有监听它们的组件上触发
- 监听发布到网站的广告的新网址
- 我应该使用什么模式在 Node/JavaScript 中制作监听机器人
- 如何在具体化 CSS 中监听<选择>更改事件
- 如何将誓言令牌推送到本地存储或本地会话并监听存储事件?(SoundCloud Php/JS 错误解决方法)
- 在 nsiWindowWatcher 或 nsiWindowMediator 上监听焦点/模糊?对于火狐扩展
- 有没有办法在 asp.net MVC 3 中使用 JavaScript、Jquery 监听事件
- 如何传播主干停止监听以防止内存泄漏
- SignalR无法调用客户端监听功能
- jQuery按钮功能监听菜单打开/关闭状态改变状态