这两天我一直在谷歌上搜索,找不到我想要的东西。
我有SMSmobile工具正在开发的PHP,它允许客户发送短信批量,当我的客户按Send
按钮,浏览器将继续加载,直到短信被发送到他的所有联系人(可能是100000个联系人或更多),所以它将从2-5分钟。同时,如果客户端在同一页面上按下浏览器、Refresh
按钮或任何其他按钮,都会破坏发送过程。
我需要显示一个弹出式进度条,防止用户在Sending
过程结束之前执行任何操作。
有什么建议吗?
发布于 2012-04-06 21:23:46
试试这个:
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!
MarkUp:
<div class="demo">
<div id="dialog-modal" title="Basic modal dialog">
<div id="progressbar"></div>
</div>
</div>
然后用这个替换你的body标签:
<body onLoad="JavaScript:checkRefresh();">
并将其添加到您的HTML中:
<form name="refreshForm">
<input type="hidden" name="visited" value="" />
</form>
无论如何,这会检测到重新加载并执行加载条,这将阻止它们重新加载(希望如此)
发布于 2012-04-06 21:23:37
使用某种锁,甚至是文件锁。然后使用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-06 21:29:22
我的解决方案是一个后台运行的脚本(cron job),它只是站在那里读取某种队列列表(SQL Table),并处理它看到的所有新条目。
也许一个小的客户端脚本调用后面的东西,只是计算行数并将其返回给前端。
https://stackoverflow.com/questions/10044046
复制相似问题