我正在尝试将 SignalR 用于 ASP.NET Core 2.0,但是当我尝试在 View 中实现 SignalR 客户端时,我收到错误消息:尽管自动完成功能在编辑器中运行良好,但变量“signalR”未定义,这是脚本:
<script type="text/javascript">
var _transport = signalR.TransportType.WebSockets; //HERE
var connection = new signalR.HubConnection(`http://${document.location.host}/chat`, {transport: _transport});
var messageInput = document.getElementById('message');
var name = '@User.Identity.Name';
var button = document.getElementById('sendMessage');
connection.on('broadcastMessage', (name, message) => {
var text = document.createElement('p');
text.innerHTML = '<strong>' + name + '</strong>' + " : " + message;
document.getElementById('messageArea').appendChild(text);
});
button.addEventListener("click", event => {
connection.invoke('send', name, messageInput.value);
messageInput.value = '';
messageInput.focus();
});
connection.start();
我已在我的 _Layout.cshtml 中添加了 signalr.js
这是我的 wwwroot 的树结构,我在其中添加了信号器的 .js 文件:
最后,这是 Firefox 中的调试器结构,我可以看到 signalr.js 已加载,jQuery 和 bootstrap 也已加载。
那么为什么“signalR”未定义?我缺少什么?是因为我在项目中手动添加了信号器 javascript 文件吗? (可能...)
最佳答案
我认为您的脚本是在加载 signalr.js 之前执行的。尝试使用事件来执行您的代码。如果我们在文档加载时执行此操作,那么我们将确保它已被定义。
$(document).load(function(){
// your code here
});
关于javascript - signalR 未定义,但 signalr.js 已加载到调试器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49385819/