2015-02-25 1 views
2

Я пытаюсь обновить индикатор выполнения HTML, используя данные из запроса на отправку Ajax. Пронумерованное значение извлекается из переменной PHP, заданной из цикла foreach, основанного на успехе электронной почты. Я изо всех сил пытаюсь найти способ отправить значение из PHP в html-строку выполнения, используя jQuery и Ajax.ajax php update progress bar value from foreach loop

У меня есть стандартный Аякса Thats запрос работает нормально, а вот мой PHP код цикла Еогеасп:

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(); 

     } 

    } 

Любая помощь будет велика, как я всю ночь!

ответ

0

Вы можете попробовать поставить его в $ _SESSION переменного и setInterval в JS напечатает значение сеанса и в конце уничтожить переменный сеанс

+0

Сессия добавляется в конце, когда все электронные письма отправляются - не при увеличении. – jamper

+0

Вы можете добавить некоторую другую переменную сеанса и проверить это, если is't меняется ... И отключить ее в конце цикла с session_unset ($ _ SESSION ['other_variable']); –

+0

Проблема в том, что я получаю все ответы в конце - не после отправки 1 электронной почты. – jamper

-1

В электронной почте Функцию отправки добавить настройки $ _SESSION значения, которое будет содержать текущий $ email_count_update стоимость. Чтобы избежать конфликтов, когда пользователь вызывает несколько запросов, отправляйте уникальное значение из JS в AJAX, обращаясь к 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); 
+0

Это меня немного сбивает с толку - я возвращаю значения из запроса ajax, но только в конечном состоянии - когда все электронные письма отправляются. Как я могу отправить сеанс на каждый интервал отправки? - Когда я отправляю через $ response, он завершает процесс, а не переносит foreach. – jamper

+0

Как я уже сказал, вам нужно создать отдельное действие (файл php, действие в контроллере), которое вернет значение $ _SESSION. В setInterval вызовите это вспомогательное действие, а не основное, которое отправляет электронные письма. –