我使用Signalr来显示服务器上发生的长进程的实时更新。
这样的想法是,用户可以看到已处理了超出设置数量的项目。
AJAX发布请求通过控制器将调用发送到服务器以启动该过程,在此过程的最后返回部分视图,并使用此结果填充容器元素。
$("body").on("click", "#process-button", function ()
{
var hub = $.connection.myHub;
$.connection.hub.start().done(function ()
{
connectionId = $.connection.hub.id;
$.ajax({
type: "POST",
url: "StartProcess/MyController"+ "&connectionId=" + connectionId,
cache: false,
success: function (data) {
$(".modal #container").empty();
$(".modal #container").html(data);
}
})
});
hub.client.sendMessage = function (message) {
$(".modal #container").empty();
$(".modal #container").append(message);
}
});
出于法律原因,我无法显示控制器ActionResult方法,但我100%确信问题出在上述代码中。我只是不知道为什么。
我已经在Chrome,Firefox,IE10、11和edge上进行了很好的测试(大概是因为他们使用websockets),但是在使用ForeverFrames的IE9上,进程却停滞了。
值得注意的是,我通过IE11使用文档模式仿真器测试了IE9。
这是网络跟踪的输出。
请对已涂黑的条目进行借口,尝试不广播代码。
如您所知,我突出显示了请求仅在何处停止,据我所知,因此未返回部分视图。
有人遇到过吗?
最佳答案
您可以尝试添加
$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] });
为了您的脚本禁止使用ForeverFrames。
关于javascript - Internet Explorer 9和ForeverFrames的Signalr轮询问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37305383/