#php #ajax
#php #ajax
Вопрос:
Я новичок в использовании ajax, но уже некоторое время использую PHP. Мне любопытно, как объединить эти два.
На моем веб-сайте есть PHP-скрипт, который требует некоторого времени для loud, потому что он выполняет несколько итераций и множество функций.
Я хочу каким-то образом разработать что-то вроде ajax-скрипта, который сообщает местоположение скрипта. Во всем скрипте есть одна переменная, которая похожа на индикатор выполнения. Каким-то образом я хочу, чтобы текст менялся каждый раз, когда изменяется эта переменная.
Возможно ли это, если да, то как?
Помощь очень ценится.
Ответ №1:
Вы можете сохранить текущее состояние индикатора выполнения в файле, кэше оперативной памяти или базе данных и написать другой скрипт, который просто возвращает это состояние. Затем вы реализуете AJAX, который извлекает эту информацию, а затем запускаете новый ajax-запрос и так далее, пока выполнение не будет завершено. Я бы предложил что-то вроде «долговременного HTTP-соединения» с использованием AJAX. Передайте состояние в вашем ajax-запросе, и если прогресс в PHP не изменился, просто спите, пока это не произойдет.
Вот так (состояние в %):
AJAX request: progress.php?state=0
AJAX response: state: 10
AJAX request: progress.php?state=10
-- on server side it is still 10%, so sleep the php progress until it changes and then reply
AJAX response: state: 11
....
И поскольку для ajax-запроса существует тайм-аут, просто запустите новый запрос, как только истечет время ожидания запроса.
Я надеюсь, что это то, что вы имели в виду.
Комментарии:
1. Я собирался предложить это. Я бы не стал утруждать себя сохранением в базу данных, просто используйте memcache, если это доступно (вы даже можете сохранить его в переменной $ _SESSION). Но с этим будет намного проще справиться, если вы используете два скрипта.
2. Сеансы также хранятся в файлах, а memcache — это кэш памяти / ram. Существует много способов хранения данных, поэтому я просто написал «файл, оперативная память, база данных». 😉
3. Да, я согласен, просто подкидываю несколько идей. 🙂
Ответ №2:
jQuery.ajax() делает то, что вы хотите:
Отправка данных в PHP-скрипт с последующим получением его результата:
$.ajax({
url: "progress.php",
success: function(response){
$("#results").html(response);
}
});
В пользовательском интерфейсе jQuery даже есть виджет Progressbar, было бы разумным решением объединить оба.
Ответ №3:
Возможно, в вашем серверном скрипте, загрузка которого занимает некоторое время, создайте «переменную отчета», которая увеличивается с определенной последовательностью переходов. Создайте независимый серверный метод обратного вызова AJAX, чтобы просмотреть переменную отчета и просто повторить это число. Когда она принимается на стороне клиента, она обновляет эту часть DOM и viola`, без беспорядка, без суеты.