我们有一些调度器类型的功能,其中调度程序执行一些操作,而另一个用户可以看到更新(查询)。发送的参数可以通过罚款在IE客户端进行更新,而无需打开开发者控制台。
但是一种方法不起作用(performUpdate – 获取查询结果 – 这是一个服务器>客户端调用,而不是客户端>服务器>客户端) – 永远不会被调用。当开发者控制台打开时,它只能被呼叫。
这是我试过的:
Why JavaScript only works after opening developer tools in IE once?
SignalR : Under IE9,messages can’t be received by client until I hit F12 !!!!
SignalR client doesn’t work inside AngularJs controller
一些代码片段
调度方
在下拉式更改中,我们获得当前选定的值,并通过电线发送更新。 (这工作正常)。
$('#Selector').on('change',function(){ var variable = $('#SomeField').val(); ... liveBatchHub.server.updateParameters(variable,....); });
服务器端
当调度程序搜索时,我们有一些服务器端代码发送搜索已经运行的通知,并告诉客户端提取结果。
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); };
编辑
一些更多的信息可能是有用的(我不知道为什么它有所作为),但这只是似乎发生在我做服务器>客户端电话。调度员正在更改搜索参数时,更新是客户端>服务器>客户端或调度客户端>服务器>查看器 – 客户端,似乎工作。点击搜索后,搜索管道中的服务将调用performUpdate服务器端(服务器>查看器 – 客户端)。不知道这是否重要?
编辑2&最终解决方案
眼睛血腥,我意识到我没有提出这个问题的一个关键部分:我们在这个页面上也使用了角度。猜猜我一直在盯着它太久了,让对方遗憾。我给了JDupont答案,因为他在正确的轨道上:缓存。但是没有jQuery的ajax缓存,有角度的$ http。
就这样没有人必须花费几天/几晚的时间将桌面敲响头,最终的解决方案是使用角度$ http禁用ajax调用缓存。
取自here:
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'; }]);
解决方法
IE默认缓存一些ajax请求。你可能想尝试全球关闭它。检查出来:How to prevent IE from caching Ajax with jQuery
基本上你会全局地切换这样的:
$.ajaxSetup({ cache: false });
或者像这样一个特定的ajax请求:
$.ajax({ cache: false,//other options... });
我的GET请求缓存有一个类似的问题。除非开启工具是开放的,否则我的更新功能只会触发一次。当它打开时,不会发生缓存。