使百分比完整(jQuery + php)

时间:2015-06-12 02:49:51

标签: javascript php jquery ajax

我想让完成百分比(进程条)显示我处理了多少数据。 这是我的PHP代码:

$w->connect();
try {
    $w->loginWithPassword($password);
}
catch (exception $e) {
    return false;
}
foreach($targets as $target)
{
    $w->sendMessage($target, $text);
}
return true;

foreach是我想要显示发送了多少消息的过程。 现在在js我有:

  function send_message(){
  var msg =  {msg_receptions:$('#msg_receptions').val(),msg_from:$('#msg_from').val(),msg_text:    $('#msg_text').val()};
$.post(
         site_url('ajax/send_message'),
         msg,
         function(data, status){

         }
       );
  }

我不知道如何让流程栏显示完成百分比!

1 个答案:

答案 0 :(得分:2)

根据评论进行编辑。

如果您想跟踪已上传的邮件数量,那么您需要在当前会话中执行轮询系统(您可以使用套接字,但这会变得复杂)。

在PHP中,启动会话(在加载第一页之前)并创建会话变量以存储进度。在您发布到的页面中,使用相同的会话,将进度设置为0,每次SendMessage循环时,使用最新进度更新该变量。

在JS中,使用AJAX提交PHP请求(因此HTML保留),然后使用setTimeout()对您需要编写的使用相同会话的新文件执行第二次AJAX请求,获取更新的进度数据并返回 - 这与初始答案相同。当您收到回复时,请再次执行setTimeout并重复(不要使用setInterval,因为您可以使服务器崩溃)。当初始请求返回时,终止超时。

最后注意:使用jQueryUI对此有点过分;所以只有你还有其他东西才能使用它。否则它的10行代码(下面)。

希望能帮助/回答问题。

**上一个答案**

最简单的方法是将两个div包装在一起。

您的样式表应包含:

<style>
    .progressBar {
        position: relative;
        border: 1px solid black;  /* Style as you see fit */
    }
    .progressIndicator {
        position: absolute;
        left: 0;
        top: 0;
        width: 0;
        height: 10%;
        background: #f00;  /* Style as you see fit */
    }
</style>

您的HTML应包含

<html>
    <div class="progressBar">
        <div class="progressIndicator">
        </div>
    </div>
</html>

您的javascript(jQuery)响应应包含

$('.progressIndicator').css({width: parseInt(data, 10) + "%"});

(数据是0到100之间返回的值)

相关问题