我发现了一个奇怪的问题。
我正在用我的 webapp 迈出彗星的第一步。长话短说,我有一个不错的小脚本,可以轮询由 php 控制器发送的另一个脚本。
后来,我会在这两种方式上工作。无论是 longpolling 还是就像现在一样 - 在 javascript 间隔上。
它是如何在 Chrome 上工作的:在“就绪”事件中,第一个脚本设置一个函数间隔,该函数向控制器发送一个 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);
Chrome 输出类似 (0,0,0,1,1,1,0) [0 not found, 1 - found0 Safari 总是输出 0。
我写在这里是因为不知道那个珍贵的浏览器发生了什么。也许这里有人有任何解决方案。
请不要试图说服我间隔不利于数据更新。我知道,现在它是我能实现的最好的。