ajax php更新来自foreach循环的进度条值

时间:2015-02-25 20:42:50

标签: php jquery ajax foreach

我尝试使用Ajax发布请求中的数据更新HTML进度条。根据电子邮件成功,从foreach循环中的PHP变量集中提取编号值。我正在努力寻找一种方法,使用jQuery和Ajax将值从PHP发送到html进度条。

我有一个标准的ajax请求,工作正常,这是我的PHP代码foreach循环:

foreach ($result as $person) { 

        $to = $person->post_title;
        $headers = "From: " . bloginfo( 'name' ) ." <". get_option( 'admin_email' ) .">\r\n";
        $headers .= "Reply-To: ". get_option( 'admin_email' ) . "\r\n";
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/plain; charset=\"utf-8\"\r\n";
        $message = $content;

        $send_email = wp_mail( $to, $subject, $message, $headers );

        if( $send_email ) {

        $email_count_update++;

        }

       // All emails have been sent
        if( $email_count_update == $email_count ) {

          $response->add( array(
          'data'  =>  'success',
          'supplemental' => array(
            'message' => __( 'Emails sent', 'mup' )
            )
          ));

         $response->send();

        }

    }

任何帮助都会很棒,因为我整夜都在忙!

2 个答案:

答案 0 :(得分:0)

您可以尝试将其放在$ _SESSION变量中,并使用js中的setInterval打印会话值,最后销毁会话变量

答案 1 :(得分:-1)

在电子邮件发送功能中添加设置$ _SESSION值,该值将保存当前$ email_count_update值。为避免用户调用多个请求时发生冲突,请将AJAX中的JS发送给PHP的唯一值。设为$ _GET ['request_unique']。

在您的代码中添加:

if( $send_email ) {
    $email_count_update++;
    $SESSION['email_counter' . $_GET['request_unique']] = $email_count_update;
}

在PHP中创建单独的操作(让它响应url /counter),使用$ _GET ['request_unique']调用将返回此值:

$response->add(
    array('email_count_update' => $SESSION['email_counter' . $_GET['request_unique']])
)->send();

在Javascript中,在发送动作请求后,每秒检查一次这个PHP会话值:

setInterval(function(){
   //make AJAX request to /counter?request_unique=XXX
   //get email_count_update from response and update progressbar
}, 1000);