【问题标题】:jQuery Browser DifferencejQuery 浏览器的区别
【发布时间】:2012-06-09 10:00:33
【问题描述】:

由于我刚开始从事 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 上提交了一份关于此问题的新错误报告。

【问题讨论】:

    标签: c# javascript jquery browser


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 经过更多测试后,我意识到它确实可以在选项卡中工作,除了当我单击选项卡时,它首先执行此 AJAX 调用。如果我先单击选项卡,它会发送消息,它工作正常。
      猜你喜欢
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 2013-06-02
      • 2019-01-28
      相关资源
      最近更新 更多