jquery — проверяет и отображает прогресс функции PHP с AJAX

Я хочу отобразить прогресс функции PHP в моем веб-браузере. Одним из решений было бы поместить прогресс в базу данных и опросить его, пока функция AJAX ожидает ответа, но мне было интересно, есть ли лучший и более чистый способ сделать это.

Я смотрел в этот плагин который добавляет progress обещают AJAX-вызов в jQuery, но он только поддерживает загрузку и загрузку.

Чтобы проиллюстрировать, чего я хотел бы достичь, мой вызов AJAX выглядит примерно так:

$.ajax({
type: 'POST',
dataType:'json',
url: ajaxUrl,
data: someData
}).progress(function(response) {

// Do something with progress messages

}).done(function(response) {

// Process complete
});

Допустим, он вызывает эту функцию в PHP:

public function heavy_lifting() {

echo json_encode( array( 'progress', 'Starting!') );

sleep(1);

echo json_encode( array( 'progress', 'Pfew') );

sleep(1);

echo json_encode( array( 'progress', 'Almost done!') );

sleep(1);

// Done!
echo json_encode( array( 'done', 'Process completed!') );
die();

}

Какой лучший способ сделать что-то подобное?

0

Решение

Лучшим подходом будет использование Websockets (трещотка
WebSockets для PHP)

Создайте сервер Websocket в PHP, затем зарегистрируйте этот Websocket на веб-странице, используя JavaScript

// Create WebSocket connection.
const socket = new WebSocket('ws://localhost:8080');

// Connection opened
socket.addEventListener('open', function (event) {
socket.send('Hello Server!');
});

// Listen for messages
socket.addEventListener('message', function (event) {
console.log('Message from server', event.data);
});

Всякий раз, когда есть изменение в прогрессе, тогда отправьте событие с сервера, которое будет получено JavaScript message EventListener и выполнить вашу задачу после этого.

Подход Websocket лучше, чем опрос.

1

Другие решения

PHP имеет встроенный прогресс загрузки сеанса, посмотрите на http://php.net/manual/en/session.upload-progress.php

1

По вопросам рекламы [email protected]