我发现了一个奇怪的问题。附加的jQuery脚本无法在Safari(Mac)上工作
我正在与我的webapp第一步彗星。长话短说,我有一个很好的小脚本,用于调查由php控制器发送的另一个脚本。
后来,我会在两种方式上工作。无论是作为longpolling还是就像它现在的作品 - 在JavaScript间隔。
它如何在Chrome上运行: 在“ready”事件上,第一个脚本设置了一个函数间隔,它向控制器发送一个ajax请求(我们将其命名为'ping.php')。如果ajax成功,msg应该替换div#wrapperForJs的html内容。
Ping.php检查数据库是否有更新,以及它是否符合脚本回显的脚本结果。上述
文本是为人道主义者,现在TL;博士:
jQuery代码:
function pingThatApp(){
$.ajax({
type: 'GET',
url: '/ping',
success: function(msg){
$('#pingWrapper').html(msg);
}
});
}
$(document).ready(function(){
window['pingLoop'] = setInterval(
function(){
pingThatApp();
},4000
);
});
PHP回声:
$timeScrpt = '<script>';
foreach ($timers['p'] as $k => $v) {
$timeScrpt .= "$('#project-{$k} .pTime').fadeOut().attr('title', 'Time spent already: {$v}').html('{$v_short}').fadeIn();";
}
foreach ($timers['t'] as $k => $v){
$timeScrpt .= "$('#timeSpent-task-{$k} b').fadeOut().html('{$v}').fadeIn();";
}
$timeScrpt .= '</script>';
一切都在Chrome的伟大工程。不过,Safari在该脚本中存在一些问题。这个问题看起来像Safari无法找到jQuery对象。
我做了一些console.log测试,检查了代码 - 输出看起来不错。
如果我改变$ k var和硬编码它有一些int或覆盖迭代开始时的$ k var,它也适用于Safari(jQuery找到该元素)。
我也使与发现元素的长度的的console.log测试:
el = $('#project-$k .pTime'); console.log(el.length);
铬输出类似的信息(0,0,0,1,1,1,0)[0没有找到,1 - found0 Safari始终输出0。
我在这里写作是因为不知道这个宝贵的浏览器正在发生什么。也许这里有人有任何解决方案。
请注意,不要试图说服我间隔对数据更新目的不利。我知道,现在最好的是我能实现的最好的。
“请,不要试图说服我,间隔不适合数据更新的目的。” * facepalm *你的轮询将永远不会使用'setInterval()'正确工作。这不是一个建议,它只是实现它的正确方法。 – 2013-03-18 19:38:36
就像我之前说的。我不会讨论这个问题。它适用于Chrome,Firefox,Opera Mobile。它在Safari上不正确。 – sznowicki 2013-03-18 19:42:19