2012-04-06 53 views
1

过去两天我一直在做谷歌搜索,找不到我想要的。在PHP中载入酒吧

我SMSmobile工具在PHP中,允许客户发送短信群发正在开发中,当我的客户按Send按钮,浏览器将继续加载,直到短信被发送给他的所有联系人(它可能值设为100000个联系人或更多),所以需要2-5分钟。同时,如果客户端按下浏览器按钮或任何其他按钮来自同一页面,它会破坏发送过程。

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

任何建议吗?

+1

你能表现出一定的你目前如何做的代码?一个建议可能是不让实际的SMS发送正在进行的活动。在数据库中排队消息并让后端进程发送消息。这样用户可以继续与网站进行交互。然后该网站可能会在每个页面上都有某种进度指示器。如果这个过程需要很长时间(超过一分钟),这将会特别好。 – David 2012-04-06 13:22:35

+0

我会建议使用AJAX和网络套接字来报告进度。另外,仅仅因为人员刷新页面,并不一定要杀死运行请求的服务器端PHP进程。 – crush 2012-04-06 13:23:24

回答

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> 

反正这个检测重载和执行一个加载栏,这将阻止他们重新加载(希望)

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'); 
} 
0

如果您打算在页面中发生这种情况,我会建议将modal dialoganimated progress bar合并。

你甚至不需要对进度条进行任何计算,只需将它设置为100%,看起来就像滚动一样,并添加一些文本,如“正在处理邮件”。

1

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

也许一个小的客户端脚本调用某些后面的脚本只是对行进行计数并将其返回到前端。

0

你的问题不只是一个loading barlot 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会是一个更好的选择

感谢

:)