У меня есть скрипт PHP, который временно загружает CSV.Одна страница перезагрузит данные CSV, полученные из $_FILES
и преобразованные в массив JSON.
Затем я перебираю строки CSV, используя $.each
.
Для каждой строки, которую я делаюAJAX-вызов функции PHP, которая устанавливает некоторые данные отслеживания заказа и отправляет электронное письмо.
Из-за ограничений электронной почты я хочу добавить задержку между каждой итерацией цикла.Однако я попытался сделать это с помощью установленного тайм-аута в JavaScript, который не работал, а также попытался добавить функцию ожидания PHP до того, как письмо будет отправлено.
Ни одна из этих операций, письма по-прежнему отправляются по адресув то же время без задержки.
Появляются все запросы, которые я делаю, независимо от добавляемых задержек, обрабатываются одновременно.
Как я могу гарантировать, что отправка электронной почты задерживается?
jQuery ($ csv_rows - это данные CSV, которые были только что загружены)
<script>
// Get CSV Rows into JSON array
var csvRows = '<?php echo json_encode( $csv_rows ); ?>';
var csvRows = ( jQuery.parseJSON( csvRows ) );
// Loop through each row
$.each( csvRows, function( key, value ) {
// Split row into array exploded by comma
row = value.toString().split( ',' );
// Get column values
order = row[0];
courier = row[1];
tracking = row[2];
// AJAX
var data = {
'action': 'shd_tracking_import',
'order': order,
'courier': courier,
'tracking': tracking,
};
// Do the ajax
$.ajax({
url: ajaxurl,
type: 'POST',
data: data,
success: function( response ) {
$( '#shd-import-results p' ).hide();
if( response !== '0' ) {
$( '#shd-import-results ul' ).append( response );
importedCount = parseInt( $( '#shd-import-progress span' ).text() );
$( '#shd-import-progress span' ).text( importedCount + 1 );
} else {
$( '<p>Error importing. Please ensure CSV meets requirements.</p>' ).appendTo( '#shd-import-results' );
}
}
});
});
</script>
PHP (это действие shd_tracking_import, на которое ссылается AJAX)
if( isset( $_POST['order'] ) && isset( $_POST['courier'] ) && isset( $_POST['tracking'] ) ) {
// Delay (due to their Office 365 limits)
usleep( 4000000 ); // 4 Seconds (usleep used as sleep cannot contain fractions, usleep is microseconds, this was 2.5 seconds hence using usleep)
// My mailing function is here (which works just not delayed)
echo 'Done';
} else {
echo '0';
}
exit;