Intereting Posts
Как получить все пятницы с текущего месяца Как скомпилировать расширение для PHP 5.3 для Windows как DLL? Должны ли мы всегда связывать наши операторы SQL? GWT с -noserver Когда предложение mysql WHERE пустое, верните все строки Проблема с флагом MySQLI MYSQL_PRI_KEY_FLAG Включить константу в строку без конкатенации Каков наилучший способ предотвратить атаку грубой силы? Как перенаправить пользователя в мобильное приложение или веб-сайт при нажатии гиперссылки, отправленной по электронной почте? Должно ли это быть обработано на стороне сервера с помощью PHP? Как сгенерировать файл .ics с использованием PHP для заданного диапазона дат и времени Экспорт PHP в Excel приводит к неправильному формату и нежелательным знакам Используя .htaccess, запретите пользователям доступ к каталогам ресурсов и тем самым разрешить доступ к ресурсам исходного кода Как уменьшить использование памяти Netbeans? Настроить htaccess для работы с IIRF на IIS6 – codeigniter Возвращает цикл в функции php

Использование jQuery / Ajax с PHP для отображения текущего прогресса

Короткие и сладкие: поиск способа вызвать файл PHP и отображение прогресса с помощью jQuery и / или Ajax. Вызывается PHP-файл upgrade.php? Step = 1, а затем возвращаемый результат добавляется к #upgradestatus. По завершении этого процесса вызывается update.php? Step = 2, и этот вывод добавляется до тех пор, пока указанное количество шагов не будет завершено.

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

Используя мой PHP-процесс, я хотел создать нечто похожее на это:

for (var s=0; s<2; s++){ $('#upgraderesult').load('upgrade.php', 'step=' + s, function() { $('#upgradestatus').append('Upgrade Step ' + s + ' Completed'); }); } 

Я также попытался использовать .ajax (), и с помощью обоих этих методов я вскоре узнал, что будучи Async, это будет немного сложнее выяснить.

Моя мысль заключалась в том, чтобы создать цикл FOR, который будет цикл для количества шагов, которые есть. Тогда цикл for создаст необходимый код jQuery / Ajax, который добавит к существующему div #upgradestatus сообщение о состоянии. Я хотел, чтобы он добавлял результат, загруженный в #upgraderesult, но чтобы он оставался простым, я просто добавил «Шаг обновления X Complete».

Так что теперь я застрял и думаю, что мне просто нужно использовать PHP для генерации правильного кода jQuery / Ajax, но я хотел проверить и посмотреть, есть ли у кого-нибудь еще какие-либо мнения или предложения о том, как это можно сделать по-другому или даже если Я думаю об этом полном неведении.

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

Спасибо за любой вклад или рекомендации / предложения, я очень благодарен!

Все спасибо за ваш вклад, с помощью некоторых из парней в Freenode #jQuery мы смогли придумать это, что прекрасно работает:

 var numSteps = 2; function loadStepAjax(s) { $.ajax('upgrade.php', { type: 'GET', dataType: 'html', data: { step: s }, success: function(data) { $('#upgradestatus').append(data); if (s < numSteps) loadStepAjax(s+1); } }); } 

Затем вы вызываете функцию:

 loadStepAjax(1); 

Вместо использования цикла FOR мы создали функцию loadStepAjax и затем использовали оператор IF для обратного вызова, чтобы определить, следует ли снова вызвать функцию.

Это всегда что-то простое, не так ли! Спасибо за вклад каждого, однако, это очень ценится.

Вы можете установить обратный вызов для запуска, когда вы используете ajax (), (post () будет лучшей альтернативой). Вы попробовали это? У вас все еще есть код, когда вы пытались ajax ()?

Это должно быть что-то вроде этого.

 $.post('upgrade.php?step=1', function() { $('#upgradestatus').append('Upgrade Step 1 Completed'); $.post('upgrade.php?step=2', function() { $('#upgradestatus').append('Upgrade Step 2 Completed'); $.post('upgrade.php?step=2', function() { $('#upgradestatus').append('All done!'); } } }); 

Конечно, вы также можете вернуть JSON и сказать «Да», все работает или что-то еще, но ключ заключается в том, что вы используете обратный вызов, чтобы подождать, пока он закончит, чтобы вызвать следующий шаг.

Есть еще один подход к этой проблеме.

Я написал исчерпывающий пример в качестве ответа на этот вопрос:

Обработка больших объемов данных на PHP без тайм-аута браузера

PS: Мой пример может быть расширен, чтобы также передавать сообщение о каждом прогрессе – на самом деле, он довольно гибкий; вы можете создать дату только части пользовательского интерфейса, который вы хотите, в соответствии с тем, что происходит на сервере, избавив клиента от ненужной обработки.