3

由于我刚刚开始在 IT 领域工作(实习大约在 2 个月前开始),我会尽力为您提供帮助我所需的所有信息。

我有一个 MVC4 应用程序,它使用 LongPolling 从服务器接收新数据(在我的情况下是消息)。根据消息的类型,它会在客户端以不同的方式处理它。


其中一种消息是系统消息:

我有两种看法。一个视图有一个按钮,另一个只有一些文本。
然后点击按钮

  1. 在控制器中设置一些属性和
  2. 强制在另一个视图上重新加载页面,从而产生新的内容(例如一些文本框)

现在,如果我在新窗口中打开这两个视图,它会正常工作(在 Firefox、IE 和 Chrome 中)。
但如果我在新标签页中打开它们,它只能在 IE 和 Chrome 中运行。Firefox 会收到消息,但不会调用回调方法。

$(document).ready(function () { 
    ReadChat();
}) 

这将初始化对 ReadChat() 的第一次调用。
正如我之前提到的,它在 IE 和 Chrome 的选项卡中运行良好,但仅在 Firefox 的新窗口中运行。
如果我检查 FireBug,来自服务器的响应会到达,我可以查看 JSON 内部。由于某种原因,它只是不调用回调。

我的第一个想法是尚未加载所有内容,因此我在第一次调用中添加了超时。

如果我这样写:

$(document).ready(function () { 
    setTimeout(ReadChat, 1000);
}

它也适用于 Firefox,只要我不将其设置为低于 ~1000。


有没有人遇到过同样的问题?为什么 Firefox 在这里有所作为?

编辑:

function ReadChat() {
    $.fn.messaging({
        receiveURL: '@Url.Action("myAction", "myMethod")',
        myID: '@Model.myID',
        callback: function(data) {
            $.each(data.messages, function(k, v) {
                if(v.kind == 3) {
                    location.reload(true);
                }
            });
            ReadChat();
        }, timeout: 25000
    }, 'read');
}

在 $.fn.messaging 中,将使用给定的参数调用 read 函数:

$.post(receiveURL, { id: myID }, function(response) {
    if($.isFunction(settings.callback) {
        settings.callback(response);
    }
}

编辑2:

正如 Diesel337 所说,我现在正在使用

$(this).ready(function () {
    ReadChat();
});

在新标签中打开:进行此调整后,我对其进行了更多测试,乍一看它运行良好。然后我注意到,如果我点击视图,应该重新加载,在点击按钮之前,它不会工作。(消息已收到,但未调用回调函数)

另一方面,如果我忽略了应该重新加载的视图,并直接单击按钮,则页面将重新加载而没有问题。

这听起来很奇怪,我知道,但如果我在单击按钮之前不查看视图,它会起作用。

我还提交了一份关于 bugzilla 的新错误报告。

4

2 回答 2

1

事实证明,导致此问题的不是 Firefox,而是 Firebug。
我今天再次尝试重现这个错误,幸运的是 Firebug 没有激活,所以它就像一个魅力。
再次打开它以获取有关原因的任何信息后,我得到了同样的错误。

注意:如果你正在开发一些需要在 $(document).ready() 上调用 AJAX 的东西,最好不要激活 Firebug,因为它会因为某种原因搞砸。

于 2012-07-25T08:14:01.310 回答
0

您是否尝试过使用 $(this) 而不是 $(document) ?

$(this).ready(function() {
   ReadChat();
});

或者

$(function() {
   ReadChat();
});
于 2012-06-07T20:45:17.563 回答