由于我刚开始从事IT工作(大约2个月前开始实习),我会尽力为您提供帮助我的所有信息。
我有一个MVC4应用程序,它使用LongPolling从服务器接收新数据(在我的情况下是消息)。根据消息的类型,它将在客户端以不同方式对待它。
其中一种消息是系统消息:
我有两个观点。一个视图有一个按钮,另一个视图只有一些文本 点击按钮然后
- 在控制器中设置一些属性
- 强制在另一个视图上重新加载页面,从而产生新内容(例如一些文本框)
醇>
现在,如果我在新窗口中打开这两个视图,它就可以正常运行(在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);
}
}
正如Diesel337所说,我现在正在使用
$(this).ready(function () {
ReadChat();
});
在新标签页中打开: 做了这个调整之后,我对它进行了一些测试,乍一看它完美无缺。然后我注意到,如果我点击视图,应该重新加载,在单击按钮之前,它将无法工作。 (收到消息,但未调用回调函数)
另一方面,如果我忽略了View,那应该重新加载,并直接点击按钮,页面会重新加载而不会出现问题。
这听起来很奇怪,我知道,但如果我不看视图,在点击按钮之前,它就可以了。
我还提交了一份关于bugzilla的新bug报告。
答案 0 :(得分:1)
原来并不是Firefox造成了这个问题,而是Firebug 我今天试图再次重现这个错误,幸运的是Firebug没有活动,所以它就像一个魅力 在再次打开以获取有关原因的任何信息后,我得到了同样的错误。
注意:如果你正在开发需要在$(document).ready()上进行AJAX调用的东西,最好不要激活Firebug,因为它会因某种原因搞乱它。
答案 1 :(得分:0)
您是否尝试使用$(this)而不是$(文档)?
$(this).ready(function() {
ReadChat();
});
OR
$(function() {
ReadChat();
});