j查询浏览器差异

本文关键字:浏览器 查询 | 更新日期: 2023-09-27 18:36:15

由于我刚刚开始从事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 中,将使用给定的参数调用读取函数:

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

编辑2:

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

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

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

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

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

我还在bugzilla上提交了关于此的新错误报告。

j查询浏览器差异

事实证明,

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

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

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

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

$(function() {
   ReadChat();
});