附加的jQuery脚本无法在Safari(Mac)上运行

时间:2013-03-18 19:34:45

标签: jquery macos safari

我发现了一个奇怪的问题。

我正在用我的webapp迈出第一步。长话短说,我有一个很好的小脚本,可以轮询由php控制器发送的另一个脚本。

稍后,我会在两种方式上工作。无论是作为longpolling还是就像现在一样 - 在javascript间隔。

它在Chrome上的运作方式: 在“就绪”事件中,第一个脚本在函数上设置一个间隔,该间隔向控制器发送一个ajax请求(让我们将它命名为'ping.php')。如果ajax成功,msg应该替换div#wrapperForJs的html内容。

Ping.php检查数据库是否有更新,是否符合脚本echo的一个脚本结果。

上面的文字是针对人文主义者的,现在是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 echo:

$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对其进行硬编码或者在迭代的beggining中覆盖$ k var,它也适用于Safari(jQuery找到元素)。

我还使用找到的元素的长度进行console.log测试:

el = $('#project-$k .pTime'); console.log(el.length);

Chrome输出类似于(0,0,0,1,1,1,0)[0未找到,1 - 找到0 Safari总是输出0。

我在这里写作因为不知道这个珍贵的浏览器发生了什么。也许有人在这里有任何解决方案。

请不要试着说服我,间隔对数据更新目的没有好处。我知道,现在,这是我能实现的最好的。

2 个答案:

答案 0 :(得分:0)

Safari(它的某些版本)将不会执行注入DOM的javascript代码。您可以使用危险的eval()或将javascript放在ajax回调中,并根据您从服务器收到的text / json进行修改。

答案 1 :(得分:0)

好的,刚发现我的错误。真是太愚蠢了,我真的非常感到心疼。

就像我之前说的那样,javascript实际上正在执行。但是,我在第二个帐户上测试Safari,与主要帐户相关。

该错误实际上是我的控制器模型权限。我正在测试的工作区由主帐户拥有。 Ping仅为用户拥有的项目发送更新信息。

所以,Safari正在执行js,我的ajax请求没问题(尽管存在性能问题,但这是另一个未来的故事)。 getElementById没有得到任何元素,因为ping没有发送所有信息。

抱歉,你浪费时间,非常感谢你的帮助。