我正在开发一个PHP - jQuery简单脚本,该脚本在每个PHP上发送电子邮件。
这是我的代码:
<HTML>
<head>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
</head>
<?php
require "./config.php";
ConnectWithMySQLDatabase();
$time = date('h:i:s');
$result = mysql_query("SELECT * FROM `emails`");
while($row = mysql_fetch_array($result))
{
$email = addslashes($row['email']);
?>
<script type="text/javascript">
setTimeout(function() {
$.post( "./Sender.php", { name: "<?PHP echo $email;?>", time: "<?PHP echo $time;?>" })
.done(function( data ) {
$( "#result" ).html( "Email sended to: " + data + "<br>");
});
}, 5000);
</script>
<?PHP
}
?>
<div id="result"></div>
我的代码的问题在于它需要 5 秒,然后它会像即时一样匆忙发送电子邮件。
- 如何使此脚本每 1 秒发送 5 封电子邮件,直到发送所有电子邮件?
- 如何使此脚本在 1 行上显示 1 个结果,然后在下面显示下一个结果,依此类推?现在脚本正在打印:
Email sended to:
只在一行上,追逐电子邮件,但不做更多的行。
提前感谢!
回答您的问题:
您的PHP代码生成一个javascript脚本,其中包含对setTimeout
函数的大量调用,但是所有这些调用都接收5000作为参数,因此,很自然地,所有电子邮件都会立即发送。
我认为您可以通过向每个setTimeout
添加 5000 来修复它,如下所示:
$result = mysql_query("SELECT * FROM `emails`");
$wait = 0;
while($row = mysql_fetch_array($result))
{
$email = addslashes($row['email']);
$wait += 5000;
?>
<script type="text/javascript">
setTimeout(function() {
$.post( "./Sender.php", { name: "<?PHP echo $email;?>", time: "<?PHP echo $time;?>" })
.done(function( data ) {
$( "#result" ).html( "Email sended to: " + data + "<br>");
});
}, <?php echo $wait; ?>); //printing 5000, 10000, 15000, etc...
</script>
<?PHP
}
?>
对于第二个问题,您只需要使用jQuey.append函数:
而不是$("#result").html("Email sended to: " + data + "<br>");
使用$("#result").append("Email sended to: " + data + "<br>");
观察:
我知道这不是这里的重点,但我认为重要的是要注意:您的代码似乎非常不安全,因为客户端脚本能够使您的服务器发送电子邮件,并且似乎没有采用身份验证方法,因为 ajax 请求只是发送电子邮件和一些"时间"......