过去两天我一直在谷歌搜索,但找不到我想要的东西。
我在PHP中开发了SMSmobile工具,允许客户端发送批量短信,当我的客户按Send
按钮时,浏览器将继续加载,直到短信发送给他的所有联系人(可能是100000)联系人或更多)因此需要2-5分钟。同时,如果客户端按下浏览器Refresh
按钮或同一页面中的任何其他按钮,则会破坏发送过程。
我需要显示一个弹出式进度条,阻止用户在Sending
进程结束之前执行任何操作。
有什么建议吗?
答案 0 :(得分: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' );
}
答案 1 :(得分:1)
我的解决方案是后台运行脚本(cron作业),它只是站在那里读取一种队列列表(SQL表)并继续它看到的所有新条目。
也许一个小的客户端脚本调用后面的东西,只计算行并将其返回到前端。
答案 2 :(得分: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>
无论如何,这会检测到重新加载并执行加载栏,这会阻止它们重新加载(希望如此)
答案 3 :(得分:0)
如果您已开始在页面中执行此操作,我建议您将modal dialog与animated progress bar合并。
您甚至不必在进度条上进行任何计算,只需将其设置为100%,这样看起来就像是在滚动,并添加一些文字,例如,&#34;您的消息正在处理中。&#34;
答案 4 :(得分: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
将是更好的选择
由于
:)