在IE 11中使用signalR时会发生奇怪的行为.场景:
我们有一些调度程序类型的功能,其中调度程序执行某些操作,而另一个用户可以实时查看更新(查询).发送的参数很好,可以在IE客户端进行更新,而无需打开开发人员控制台.
但是一个不起作用的方法(performUpdate- 获取查询结果 - 这是服务器>客户端调用,而不是客户端>服务器>客户端) - 永远不会被调用.当开发者控制台打开时,它只会得到打电话.
这是我尝试过的:
为什么JavaScript只在IE中打开开发人员工具一次后才有效?
SignalR:在IE9下,客户端无法接收消息,直到我点击F12 !!!!
一些代码片段
调度员方面
在下拉列表更改时,我们获取当前选定的值并通过网络发送更新.(这很好).
$('#Selector').on('change', function(){
var variable = $('#SomeField').val();
...
liveBatchHub.server.updateParameters(variable, ....);
});
Run Code Online (Sandbox Code Playgroud)
服务器端
当调度程序搜索时,我们会有一些服务器端代码发送已运行搜索的通知,并告诉客户端提取结果.
public void Update(string userId, Guid bId)
{
var context = GlobalHost.ConnectionManager.GetHubContext<LiveBatchViewHub>();
context.Clients.User(userId).performUpdate(bId);
}
Run Code Online (Sandbox Code Playgroud)
客户端(实时更新的查看者)
除非开发者工具是开放的,否则永远不会调用
liveBatchHub.client.performUpdate = function (id) {
//perform update here
update(id);
};
Run Code Online (Sandbox Code Playgroud)
编辑
一些可能有用的信息(我不确定它为什么会产生影响)但这只会在我做服务器>客户端调用时发生.当调度程序更改搜索参数时,更新是客户端>服务器>客户端或调度程序客户端>服务器>查看器客户端,这似乎有效.单击搜索后,搜索管道中的服务将调用performUpdate服务器端(server> viewer-client).不确定这是否重要?
编辑2和最终解决方案
眼睛充血,我意识到我遗漏了这个问题的一个关键部分:我们在这个页面上也使用了角度.猜猜我已经盯着它看了太久而把它留了出去 - 抱歉.我给了JDupont答案,因为他在正确的轨道上:缓存.但不是jQuery的ajax缓存,角度$ http.
就这样,没有人不得不花费数天/晚的时间将头撞在桌子上,最终的解决方案是禁用使用angulars $ http的ajax调用缓存.
取自这里:
myModule.config(['$httpProvider', function($httpProvider) {
//initialize get if not there …Run Code Online (Sandbox Code Playgroud) 我现在有点腌渍.我正在构建一个从CGI后端获取数据的网页.我无法控制CGI后端,也无法控制服务器(因此没有mod_headers或mod_expires).此外,由于脚本的参数,我不能为每个请求附加唯一值(如'&089u0af0d98).请求是使用XmlHttpRequest对象的AJAX.我试图设置'If-Modified-Since'和'Cache-Control'请求标头失败.有没有人对我如何阻止AJAX响应被浏览器缓存有任何其他想法?
我必须承认,这是我在这个网站上的第一篇文章,所以如果我做错了(格式化等),我会在建议中道歉.
无论如何,我正在使用javascript(和jQuery)创建一种mmo,到目前为止,Chrome,Safari,Firefox等都运行良好.但是,我发现在某个地方,Internet Explorer崩溃了.
通过重现崩溃,我把它缩小到这个代码:
function getUpdates(){
var data={uid:playerName,area:1,mid:lastMessage};
$.ajax({
url: "getUpdates.py",
timeout: 32000,
data: data,
type:"GET",
complete: function(obj, textStatus){
//handleUpdates(obj);
getUpdates();
}
});
}
Run Code Online (Sandbox Code Playgroud)
应该在很长一段时间内轮询更新.但是,在一次回复之后的IE中,这段代码陷入无限循环,这会使浏览器崩溃.只有在没有服务器响应时,每次回复后似乎都不会崩溃.
注意,表示"完成:......"的行已被尝试为:
success: function(...){getUpdates();...},
error: function(...){getUpdates();...}
Run Code Online (Sandbox Code Playgroud)
出现同样的问题.
我目前已经开始了一个包括AJAX在内的项目,我遇到了一个问题.使用Microsoft Edge(和Internet Explorer)时,它不会更新数据,除非我关闭整个页面并再次打开它,或者我打开我的PHP文件,我通过AJAX发送数据.
有没有人没有如何使用PHP和/或Javascript解决这个问题?
提前致谢
ajax ×2
asp.net-mvc ×1
crash ×1
iis ×1
javascript ×1
jquery ×1
long-polling ×1
php ×1
polling ×1
signalr ×1