-1

我有这个用于通知警报的 javascript 函数。这就是它的作用 -- 使用 Ajax 连接到 php -- php 发送一个 javascript 代码 -- 使用 eval(code) 执行的代码用新的通知更新一个 div

Javascript代码

function LOAD_NOTIFICATIONS(uid){
    $(document).ready(function() {
    var sendData = { action : 'LoadUserNotifications' , uid : uid } ;
    $.ajax({
        url: 'config/ajax/loader.php',
        cache: false,
        data: sendData,
        success: function(retData){
            eval(retData);
        }
    });
});

setTimeout('LOAD_NOTIFICATIONS(' + uid + ')', 10000 );
    //Recheck every 10 secs
}

PHP 服务器

if($action == 'LoadUserNotifications'){
    $uid = clean($_POST['uid']) ;
    $Notifications = LoadUserNotifications($uid) ;

    $count = $Notifications[0] ;
    $html = $Notifications[1] ;

    $ret = "
    $('#NotificationCount').html('$count').css('visibility','visible');
    $('#notifynav').html(\"$html\");  // Update notification Div
    " ;

    if($count == 0){
        $ret = "
        $('#NotificationCount').css('visibility','hidden');
        $('#notifynav').html(\"<li><a href='' class='false' onclick='return false' >no                 notification</a></li>\"); " ;
    }
    echo '$(function(){'.$ret.'});' ;
    exit();
}

现在的问题是我如何将这段 javascript 函数转换为 webworker 以执行相同的任务。

4

1 回答 1

1

web worker 不能以任何方式修改 DOM。因此,您不能将其转换为执行相同操作的网络工作者。只有主 JS 线程可以修改 DOM。

事实上,我看不出使用网络工作者来完成这项任务有什么好处。您可以简单地使用异步 ajax 调用,然后在 ajax 调用返回您的数据时处理结果。您可以使用 Web Worker 进行 ajax 调用,然后将 ajax 调用的结果发送回主线程,然后再发送到 DOM,但这只是更复杂,没有特别的优势。它不会有任何反应。

仅供参考,在第一个 ajax 调用完成后设置下一个 ajax 调用的计时器通常更安全。如果响应时间超过您的时间间隔(在您的情况下为 10 秒),这可以防止任何 ajax 调用堆积。

于 2013-09-13T17:11:58.167 回答