1

这两天我一直在谷歌搜索,找不到我想要的。

我有使用 PHP 开发的 SMSmobile 工具,它允许客户端发送批量 SMS,当我的客户按下Send按钮时,浏览器将继续加载,直到 SMS 发送给他的所有联系人(可能是 100000 个联系人或更多),所以需要从 2-5 分钟。同时,如果客户端按下浏览器Refresh按钮或同一页面上的任何其他按钮,它将破坏发送过程。

我需要显示一个弹出进度条,以防止用户在Sending流程结束之前执行任何操作。

请问有什么建议吗?

4

5 回答 5

2

使用某种锁,甚至是文件锁。然后使用 ajax 每 X 秒轮询一次以查看作业是否完成。

function send() {
   if ( file_exists('/tmp/' . $session_key . '.lck' ) ) return;
   touch ( '/tmp/' . $session_key . '.lck' );
   # do the actual job
   # ...
   unlink( '/tmp/' . $session_key . '.lck' );
}
于 2012-04-06T13:23:36.923 回答
1

我的解决方案将是一个后台运行脚本(cron 作业),它只是站在那里读取一种队列列表(SQL 表)并继续它看到的所有新条目。

也许是一个小的客户端脚本,它调用后面的东西,只计算行数并将其返回到前端。

于 2012-04-06T13:29:21.587 回答
0

试试这个:

function checkRefresh()
{
if( document.refreshForm.visited.value == "" )
{

    document.refreshForm.visited.value = "1";


}
else
{
document.write ('
$(function2() {
    // a workaround for a flaw in the demo system (http://dev.jqueryui.com/ticket/4375), ignore!
    $( "#dialog:ui-dialog" ).dialog( "destroy" );

    $( "#dialog-modal" ).dialog({
        height: 140,
        modal: true
    });
});
$(function() {
    $( "#progressbar" ).progressbar({
        value: 59
    });
});
')
}
} 

确保你有 jQuery!

标记:

<div class="demo">
<div id="dialog-modal" title="Basic modal dialog">
<div id="progressbar"></div>
</div>
</div>

然后用这个替换你的身体标签:

<body onLoad="JavaScript:checkRefresh();">

并将其添加到您的 HTML 中:

<form name="refreshForm">
<input type="hidden" name="visited" value="" />
</form>

无论如何,这会检测到重新加载并执行加载栏,这将阻止它们重新加载(希望如此)

于 2012-04-06T13:23:45.893 回答
0

如果您打算在页面中发生这种情况,我建议将模态对话框动画进度条结合起来。

您甚至不必对进度条进行任何计算,只需将其设置为 100%,使其看起来像在滚动,并添加一些文本,例如“正在处理您的消息”。

于 2012-04-06T13:24:55.220 回答
0

loading bar你的问题不仅仅是lot of things are wrong with your application architecture

问题 ? Even if the person does not click refresh and there is a connection issue what happens

快速解决方案

采取SMS information

存放在Database

发送以后使用cron JOB

更好的解决方案

采用Messaging Queue

您不必在用户手机上显示加载栏....Message Sent会是更好的选择

谢谢

:)

于 2012-04-06T13:29:45.627 回答