jQuery浏览器差异

时间:2012-06-05 11:22:12

标签: c# javascript jquery browser

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

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


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

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

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

现在,如果我在新窗口中打开这两个视图,它就可以正常运行(在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);
    }
}

EDIT2:

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

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

在新标签页中打开: 做了这个调整之后,我对它进行了一些测试,乍一看它完美无缺。然后我注意到,如果我点击视图,应该重新加载,在单击按钮之前,它将无法工作。 (收到消息,但未调用回调函数)

另一方面,如果我忽略了View,那应该重新加载,并直接点击按钮,页面会重新加载而不会出现问题。

这听起来很奇怪,我知道,但如果我不看视图,在点击按钮之前,它就可以了。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您是否尝试使用$(this)而不是$(文档)?

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

OR

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