我使用 Signalr 显示服务器上发生的长进程的实时更新。
这个想法是用户可以看到有多少项目已经处理了一定数量。
AJAX post 请求将调用发送到服务器以通过 Controller 启动流程,最后返回一个部分 View ,并用该结果填充容器元素。
$("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);
}
});
出于法律原因,我无法显示 Controller ActionResult 方法,但我 100% 确定问题出在上面的代码中。我只是想不通为什么。
我在 Chrome、Firefox、IE10、11 和 edge 中测试过一切正常(大概是因为他们使用 websockets),但在使用 ForeverFrames 的 IE9 上,该过程停滞不前。
值得注意的是,我通过 IE11 使用文档模式模拟器测试了 IE9。
这是网络跟踪的输出。
请原谅被涂黑的条目,尽量不传播代码。
如您所见,我已经突出显示了请求只是停顿的地方,据我所知,因此不会返回部分 View 。
有人遇到过这个吗?
最佳答案
你可以尝试添加
$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] });
在您的脚本中禁止使用 ForeverFrames。
关于javascript - Internet Explorer 9 和 ForeverFrames 的 Signalr 轮询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37305383/