Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Инициативный Ajax
 
 автор: Владимир55   (29.10.2009 в 00:34)   письмо автору
 
 

Файл 1.php содержит:
<?php
    
print $data '<p>Пример</p>';
    
// Файл записан в  UTF-8
?>


Файл 2.php содержит:
<div id="content"></div>
<script src="jquery.min.js"></script>
<script>
$.get('1.php', function(data){
  // в переменной data находится ответ от скрипта
  $('#content').html(data);
});
</script>


При вызове файла 2.php посредством Ajax информация поступает в браузер. То есть, инициатором появления информации в браузере является файл 2.php, запускаемый с клиентской машины.

А можно ли инициатором сделать файл 1.php ?

То есть, если на файле 1.php выполняется какая-либо серверная программа (например, счетчик циклов на операторе for ($i=1; $i < 10000; $i++)), то как посредством Ajax вывести в браузер номер текущего цикла? Не в виде последовательности echo "<br> $i", а что бы каждый номер выводился на месте предыдущего?

  Ответить  
 
 автор: Саня   (29.10.2009 в 00:52)   письмо автору
20 Кб
 
   для: Владимир55   (29.10.2009 в 00:34)
 

Можно. Примерная схема действия:
1. Запускаем аяксом 1.php
2. Так как подразумевается, что 1.php выполняется долго, то он время от времени записывает в текстовый файл номер итерации (например через каждые 10)
3. Запускаем аяксом 2.php
4. 2.php читает из этого файла номер итерации и отдаёт его в браузер.

Пример можно посмотреть во вложении.

  Ответить  
 
 автор: Владимир55   (29.10.2009 в 01:38)   письмо автору
 
   для: Саня   (29.10.2009 в 00:52)
 

Спасибо, очень интересное решение!

И очень неожиданное для меня...

Как я понял, посредством аякс напрямую подкачивать информацию из запущенного 1.php в html-файл для дальнейшего отображения браузером невозможно. То есть, не "дергать" периодически 2.php, а чтобы непрерывно напрямую из 1.php в html-файл.

Это неосуществимо?

  Ответить  
 
 автор: Саня   (29.10.2009 в 01:49)   письмо автору
 
   для: Владимир55   (29.10.2009 в 01:38)
 

Так нельзя. Функция, указанная вторым параметром для $.get(), получит данные только после завершения работы скрипта. В этом легко убедиться. Перепишите функцию start()
function start() {
  $.get('1.php', function(data){
    $('#content').text(data);
  });
}

А в 1.php вместо file_put_content
print iconv('cp1251', 'utf-8', $message);

Хоть 1.php отдаёт данные порциями, в конечном итоге они вылезут все одновременно.

  Ответить  
 
 автор: Владимир55   (29.10.2009 в 11:08)   письмо автору
 
   для: Саня   (29.10.2009 в 01:49)
 

Получается, что я не совсем верно понимал сущность аякса. Теперь буду знать. Благодаря Вам. Спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования