将信号器与IE 11一起使用时,会发生奇怪的行为。脚本:
我们有一些调度程序类型功能,其中调度程序执行一些操作,其他用户可以实时看到更新(查询)。发送的参数可以在IE客户端进行更新,而无需打开开发人员控制台。
但是一个不工作的方法(performUpdate
-获取查询结果-这是一个服务器
以下是我尝试过的:
为什么JavaScript只在IE中打开一次开发者工具后才起作用?
信号员:在IE9下,在我点击F12之前,客户端无法接收消息!!!!
信号器客户端在AngularJs控制器内不工作
一些代码片段
调度员侧
在下拉更改时,我们获取当前选定的值并通过网络发送更新。(这很好用)。
$('#Selector').on('change', function(){
var variable = $('#SomeField').val();
...
liveBatchHub.server.updateParameters(variable, ....);
});
服务器端
当dispatcher进行搜索时,我们有一些服务器端代码,用于发送搜索已运行的通知,并告诉客户端提取结果。
public void Update(string userId, Guid bId)
{
var context = GlobalHost.ConnectionManager.GetHubContext<LiveBatchViewHub>();
context.Clients.User(userId).performUpdate(bId);
}
客户端(实时更新的查看器)
除非开发人员工具处于打开状态,否则永远不会调用它
liveBatchHub.client.performUpdate = function (id) {
//perform update here
update(id);
};
编辑
更多一些可能有用的信息(我不知道为什么会有不同),但这似乎只有在我使用服务器时才会发生
编辑2
眼睛充血,我意识到我遗漏了这个问题的一个关键部分:我们在这一页上也使用了angular。我想我已经盯着它太久了,把这个忘了-对不起。我给了JDupont答案,因为他在正确的轨道上:缓存。但不是jQuery的ajax缓存,angulars$http。
为了让其他人不必日夜把头撞到桌子上,最终的解决方案是使用angulars$超文本传输协议禁用ajax调用的缓存。
摘自这里:
myModule.config(['$httpProvider', function($httpProvider) {
//initialize get if not there
if (!$httpProvider.defaults.headers.get) {
$httpProvider.defaults.headers.get = {};
}
// Answer edited to include suggestions from comments
// because previous version of code introduced browser-related errors
//disable IE ajax request caching
$httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
// extra
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
}]);
如果您的代码与其他浏览器正常工作,那么问题可能来自信号器使用的传输方法。它们可以是WebSocket、服务器发送的事件、永久帧和基于浏览器支持的长轮询。
永久框架仅适用于Internet Explorer。您可以查看Signal的简介,了解在各种情况下将使用哪种传输方法(请注意,您不能在每个浏览器上使用任何传输方法,例如,IE不支持服务器发送的事件)。
您只需查看请求的QueryString
,就可以了解集线器中使用的传输方法,这对于日志记录非常有用:
Context.QueryString["transport"];
我认为问题很可能来自于IE使用Forever Frame by,因为有时候它会导致Signer在Ajax调用时崩溃。您可以尝试删除SignalR中的永久帧支持,并强制使用浏览器支持的其余方法,在客户端使用以下代码:
$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] });
我展示了一些关于Signal的实际情况,并给了您一些日志/跟踪工具来解决您的问题。有关更多帮助,请放置其他详细信息:)
更新:由于您的问题似乎非常奇怪,而且我对您的代码没有足够的了解,因此根据我的经验,我向您推荐一些有用的说明:
此外,我认为您需要使用liveBatchHub.server.update(变量,......);
而不是liveBatchHub.server.update参数(变量,......);
在Dispatcher端进行服务器调用,因为您应该使用服务器方法名称在server
之后。
我过去在IE中也经历过类似的行为。我可能知道解决你问题的办法。
IE默认缓存一些ajax请求。您可能希望尝试在全局范围内关闭此功能。检查一下:如何防止IE使用jQuery缓存Ajax
基本上,你会像这样关闭它:
$.ajaxSetup({ cache: false });
或者对于像这样的特定ajax请求:
$.ajax({
cache: false,
//other options...
});
我的GET请求缓存也有类似的问题。除非开发工具打开,否则我的更新功能只会启动一次。当它打开时,不会发生缓存。
我想在菜单栏文本被选中时更改它的颜色。 这里可能出了什么问题? 我尝试使用伪类':active',但没有得到应用。其中as':Hover'正在工作。 我还尝试使用'Router LinkActive',它应该添加类'Active-Link',但这也不起作用。 我在下面给出了HTML、SCCS和TS代码:
我编写了一组简单的类,向一位朋友演示如何为AOP(而不是xml配置)使用注释。我们无法使@ComponentScan工作,并且AnnotationConfigApplicationContext getBean的行为也不正常。我想明白两件事。请参阅下面的代码: PersonOperationSI.java PersonOperations.java PersonOperationsConfigCl
我正在Eclipse Neon中使用Hibernate工具(JBoss tools 4.4.0.Final)。现在,我想将数据库表反向工程为POJO对象和Hibernate映射文件。 我遵循了一些关于如何设置Eclipse来生成POJO对象的教程。在我运行配置之前,一切看起来都很好。什么都没发生,也没有抛出错误。有人能帮我吗?数据库是一个微软SQL服务器2014。 我的逆向工程配置文件看起来像:
我正在尝试使用codeigniter insert\u batch将多行插入到我的数据库表中。根据错误报告,似乎没有设置表列。只是阵列的数量: 我的看法是: 我的控制器: 和型号:
我尝试使用StreamWriter.WriteLine(不是静态地)将几行代码一次写到。txt文件中。 每个播放器对象都是字符串cosnatants。如果我使用不同的文件名(也称为BasicTestInfo2.txt),它会在bin.debug中创建该文件,但它是空的。我知道我到达了using块的内部(我在里面放了一个console.writeline),我知道我想要截断,这就是为什么我对appe
我正在尝试使用yii2邮件组件发送电子邮件。 配置web。php 还有我的代码。 我收到了这个错误。 Swift\u TransportException预期响应代码为250,但收到代码“535”,消息“535-5.7.8用户名和密码不被接受。有关详细信息,请访问535 5.7.8https://support.google.com/mail/?p=BadCredentialsa13-v6sm41
问题内容: 似乎不起作用,但确实起作用。有什么想法吗? 问题答案: 您不能在Java中将基本类型用作通用参数。改为使用: 使用自动装箱/拆箱,代码几乎没有区别。自动装箱意味着您可以编写: 代替: 自动装箱意味着将第一个版本隐式转换为第二个版本。自动拆箱意味着您可以编写: 代替: 如果未找到键,则隐式调用意味着将生成一个,例如: 原因是类型擦除。例如,与C#不同,泛型类型不会在运行时保留。它们只是显