PHP AJAX скриптинг для получения переменной PHP

#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`, без беспорядка, без суеты.