我使用Signalr显示服务器上发生的长进程的实时更新。
这个想法是用户可以看到已经处理了一定数量的项目。
AJAX post请求将调用发送到服务器以通过控制器启动进程,在此结束时返回部分视图并使用此结果填充容器元素。
$("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中测试了这一点并且边缘都很好(可能是因为他们使用的是websockets)但是在使用ForeverFrames的IE9上,这个过程正在停滞。
值得注意的是,我通过IE11使用文档模式模拟器测试了IE9。
以下是网络跟踪的输出。
请原谅黑名单,不要广播代码。
正如你所知,我突出显示了请求只是拖延的地方,据我所知,部分视图因此没有返回。
之前有人遇到过这个吗?
答案 0 :(得分:1)
您可以尝试添加
$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] });
在您的脚本中禁止使用ForeverFrame。