C# jQuery浏览器差异

C# jQuery浏览器差异,c#,javascript,jquery,browser,C#,Javascript,Jquery,Browser,由于我刚刚开始从事IT工作(实习大约在2个月前开始),我将尽力为您提供帮助我所需的所有信息 我有一个MVC4应用程序,它使用LongPolling从服务器接收新数据(在我的例子中是消息)。根据消息的类型,它将在客户端对其进行不同的处理 这些消息中有一种是系统消息: 我有两种看法。一个视图有一个按钮,另一个只有一些文本。 然后点击按钮 设置控制器中的某些属性,并 强制在另一个视图上重新加载页面,生成新内容(例如某些文本框) 现在,如果我在一个新窗口中打开这两个视图,结果会很好(在Firefox、

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

我有一个MVC4应用程序,它使用LongPolling从服务器接收新数据(在我的例子中是消息)。根据消息的类型,它将在客户端对其进行不同的处理


这些消息中有一种是系统消息:

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

  • 设置控制器中的某些属性,并
  • 强制在另一个视图上重新加载页面,生成新内容(例如某些文本框)
  • 现在,如果我在一个新窗口中打开这两个视图,结果会很好(在Firefox、IE和Chrome中)。
    但如果我在一个新标签中打开它们,它将只在IE和Chrome中工作。Firefox将接收消息,但不会调用回调方法

    $(文档).ready(函数(){
    ReadChat();
    }) 
    
    这将初始化对ReadChat()的第一个调用。
    正如我前面提到的,它在IE和Chrome的选项卡中工作得非常好,但只在Firefox的新窗口中工作。
    如果我检查FireBug,服务器的响应就会到达,我可以查看JSON内部。它只是因为某种原因没有调用回调

    我的第一个想法是,并不是所有的东西都已加载,我在第一次调用中添加了一个超时

    如果我这样写:

    $(文档).ready(函数(){
    设置超时(ReadChat,1000);
    }
    
    它也适用于Firefox,只要我不将其设置为低于~1000


    有人遇到过同样的问题吗?为什么Firefox会在这里产生不同

    编辑: 函数ReadChat(){ $.fn({ receiveURL:'@Url.Action(“myAction”、“myMethod”), myID:“@Model.myID”, 回调:函数(数据){ $.each(数据、消息、函数(k、v){ 如果(v.kind==3){ 位置。重新加载(true); } }); ReadChat(); },超时:25000 }“读”); } 在$.fn.messaging中,将使用给定参数调用read函数:

    编辑2: 正如Diesel337所说,我现在正在使用

    在新选项卡中打开: 做了这个调整后,我对它进行了更多的测试,乍一看它工作得很好。然后我注意到,如果我单击视图,应该在单击按钮之前重新加载,它将不工作。(收到消息,但没有调用回调函数)

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

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

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

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


    事实证明,引起这个问题的不是Firefox,而是Firebug。
    我今天再次尝试重现这个错误,幸运的是Firebug没有激活,所以它工作得很好。
    在再次打开它以获取有关原因的任何信息后,我得到了相同的错误


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

    经过更多的测试后,我意识到它在选项卡中可以工作,但当我单击选项卡时除外,该选项卡首先执行此AJAX调用。如果我先单击发送消息的选项卡,则工作正常。
    $.post(receiveURL, { id: myID }, function(response) {
        if($.isFunction(settings.callback) {
            settings.callback(response);
        }
    }
    
    $(this).ready(function () {
        ReadChat();
    });
    
    $(this).ready(function() {
       ReadChat();
    });
    
    $(function() {
       ReadChat();
    });