Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ожидание окончания запроса..

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Segol
Отправлено: 29 Мая, 2014 - 10:32:31
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Добрый день уважаемые форумчане..

Столкнулся с проблемой связной с очерёдностью обработки данных.. а именно..

есть небольшой скрипт.. получение и передача данных..
PHP:
скопировать код в буфер обмена
  1.  $i=0;
  2. $ppstart=(int)$_GET['start'];
  3. $pnomer=(int)$_GET['num'];
  4.  
  5. $wibor1=$DB->query("
  6. SELECT * WHERE `id` = ".$ppstart." ORDER BY `date_from` ASC
  7. LIMIT 0 , 2");
  8. while($row = mysql_fetch_array($wibor1)) {
  9. $wibor[] = $row;
  10. }
  11. foreach ($wibor as $kanal){
  12. $startu= $kanal['date_from'];
  13. $stopu = $kanal['date_to'];
  14. $i++;
  15. if($i==1){
  16. $start=$startu;
  17. $stop= $stopu;
  18.  
  19. }
  20. }


ниже расположен яваскрипт вывода данных..

PHP:
скопировать код в буфер обмена
  1.  
  2. <script type="text/javascript">
  3.     $(document).ready(function() {
  4.     Start("<?=$start?>","<?=$stop?>";
  5.      });
  6.   </script>
  7.  
  8.  


В 99% скрипт срабатывает....1 % нет.. Если данные не успевают получить с базы данных яваскрипт срабатывает без данных..в итоге сбой.
Собственно вопрос..как добиться полной загрузи всех данных с базы..а потом уже срабатывание яваскрипта...

(Отредактировано автором: 29 Мая, 2014 - 10:33:25)

 
 Top
Мелкий Супермодератор
Отправлено: 29 Мая, 2014 - 10:37:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Segol пишет:
как добиться полной загрузи всех данных с базы..а потом уже срабатывание яваскрипта...

By design.
Сначала делаете, что хотите - потом выводите страницу клиенту. JS отработает после загрузки страницы, т.к. код висит на ready.


-----
PostgreSQL DBA
 
 Top
Segol
Отправлено: 29 Мая, 2014 - 11:45:15
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Извиняюсь, но сейчас так и есть..

в верху обрабатывается пхп..в низу яваскрипт..
с теорией понятно.что надо дожидаться завершения процесса пхп

как практически реализовать.. маленький пример..плис...
 
 Top
Мелкий Супермодератор
Отправлено: 29 Мая, 2014 - 12:16:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




плис? Я не разбираюсь в программируемых логический интегральных схемах.

Я пока не понимаю, пример чего вам надо и что вы хотите реализовать.
Когда сработал ready - php уже умер. Дожидаться окончания работы PHP нет смысла. Он может уже давно обрабатывать другие запросы, а вы всё ещё загружаете страницу от фронтенд-сервера.


-----
PostgreSQL DBA
 
 Top
Segol
Отправлено: 29 Мая, 2014 - 13:02:39
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




"Когда сработал ready - php уже умер."

В том то и проблема.. что он срабатывает ещё до завершения всех процессов пхп..

по идеи яваскрипт срабатывает после выбора данных пхп..

а по сути.сейчас "как успеет".. если данные пхп успеют полностью загрузится с базы , обработаться- всё сработает как надо ..
если не успеют (повиснет или отклик с базы затормозится)- яваскрипт обработается без данных что приводит к падению процесса
 
 Top
Мелкий Супермодератор
Отправлено: 29 Мая, 2014 - 13:31:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Докажите.
Древний драйвер mysql_* в принципе не умеет неблокирующие запросы. Когда mysql_query возвращает управление, уже не только запрос отправлен субд, а уже выполнен и вплоть до последнего байта получен ответ.


-----
PostgreSQL DBA
 
 Top
Segol
Отправлено: 29 Мая, 2014 - 13:42:23
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Да вы поймите.. я и ищю проблему почему происходит подобное..

теоретически.. залучённые в ready обрабатываются после окончания процесса..всё верно..
я хочу понять почему у меня иногда яваскрипт включается ранее чем данные обработаются..
что доказывать , если с 10 раза данные не успевают получить с базы а яваскрипт срабатывает без данных..
я ведь показал как выглядит выбор с базы и запрос яваскрипта на основании этих данных....
 
 Top
IllusionMH
Отправлено: 29 Мая, 2014 - 13:52:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Segol, проверьте ручками запросы к базе при которых возникает проблема. Похоже, что данных в переменных нет.

(Отредактировано автором: 29 Мая, 2014 - 13:55:21)

 
 Top
Segol
Отправлено: 29 Мая, 2014 - 14:02:55
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




IllusionMH пишет:
Segol, проверьте ручками запросы к базе при которых возникает проблема. Похоже, что данных в переменных нет.


функция старт передаёт данные обработанные с пхп на файл plej.js

весь процес

выбор данных с пхп (указал выше)

далее фаил куда буду переданы данные через функзию старт

<script type="text/javascript" src="./ plej.js?>"></script>

и собственно сама функзия..

<script type="text/javascript">
$(document).ready(function() {
Start("<?=$start?>","<?=$stop?>";
});
</script>


данные начинают терятся после того, как яваскрипт функция Start срабатывает ранее чем данные были выбраны с базы..
 
 Top
Мелкий Супермодератор
Отправлено: 29 Мая, 2014 - 14:12:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Segol пишет:
я ведь показал как выглядит выбор с базы и запрос яваскрипта на основании этих данных....

И не показали обработку ошибок. Банальное - запрос вернул 0 строк. Что случится? Судя про приведённому коду - пара notice.

Segol пишет:
я и ищю проблему почему происходит подобное..

То выдвигайте и опровергайте обоснованные теории.
Хорошо, допустим ваша теория:
Segol пишет:
я хочу понять почему у меня иногда яваскрипт включается ранее чем данные обработаются..

Удалим из вопроса лишние сущности.
Выведите просто на экран. Всегда есть значения? Значит PHP и СУБД к проблеме отношения не имеют.
Заметили, что есть не всегда - яваскрипт, как и любые клиентские технологии, к проблеме отношения не имеют.


-----
PostgreSQL DBA
 
 Top
Segol
Отправлено: 29 Мая, 2014 - 14:48:43
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Фингал Может вы просто укажете на возможную причину ?
(Добавление)
значение есть всегда при первом входе.. согластно полученных Get данных с бызы выберется номер

если обновлять страницу к примеру 10 раз..то на 10-9 раз .
данные предполагаю не выбираются с базы и переменные обнуляются..
обнуляются именно переменные которые должны были выбраны с базы..
 
 Top
Мелкий Супермодератор
Отправлено: 29 Мая, 2014 - 15:18:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Segol пишет:
данные предполагаю не выбираются с базы и переменные обнуляются..

Ок, гипотеза есть. Теперь докажите или же опровергните её.
Выведите переменные, выведите то, что можете достать о результате запроса. Количество рядов, например.

Хотя я и не понял, что же у вас произошло на "10-9 раз". Пара null'ов?
Отлично, значит дело пошло - теперь известно, что JS ни при чём.

На всякий случай ещё раз скажу явно - проверьте свой error_reporting. Он должен быть -1


-----
PostgreSQL DBA
 
 Top
Segol
Отправлено: 29 Мая, 2014 - 15:26:22
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Мелкий пишет:
Segol пишет:
данные предполагаю не выбираются с базы и переменные обнуляются..

Ок, гипотеза есть. Теперь докажите или же опровергните её.
Выведите переменные, выведите то, что можете достать о результате запроса. Количество рядов, например.

Хотя я и не понял, что же у вас произошло на "10-9 раз". Пара null'ов?
Отлично, значит дело пошло - теперь известно, что JS ни при чём.

На всякий случай ещё раз скажу явно - проверьте свой error_reporting. Он должен быть -1


я не говорю что js причём или не причём..а говорю что он срабатывает всегда..но ингда без данных которые были выбраны с базы..
в принцепе вопрос и состоял в том , чтобы яваскрипт не срабатывал пока данные с базы не были получены..
(Добавление)
Segol пишет:
"10-9 раз".


на 9-10 раз данные с базы пустые..
 
 Top
IllusionMH
Отправлено: 29 Мая, 2014 - 15:34:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Segol, самый банальный способ проверки.
Сразу после строкой с запросом пишите результаты в файл. Окрытвайте страницу и после проблем - смотрите что в файле.
Способ лучше - настраиваете дебагер и смотрите построчно что не так.
данные не "не успели прийти из базы", а с ними проблемы, либо с условиями ниже.
Данные действия в PHP происходят синхронно, а значит ответ не может прийти после того как JS код отправился клиенту.
 
 Top
DelphinPRO
Отправлено: 29 Мая, 2014 - 17:09:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Весь день пытаюсь вникнуть в тему, ни фига не понимаю.
Если у вас нет аякс-запросов на странице, принимающих данные, которые должны быть обработаны функцией, никаких проблем не должно быть.
Где php и где javascript! Буквально на разных компьютерах, первый на сервере, второй у пользователя. php отработал свою логику, сформировал html разметку и отдал ее клиенту. Или отдает порциями, неважно. В браузере яваскрипт выполняется последовательно, по мере подгрузки html кода. Если навешивается событие ready - то коллбэк функция в обработчике этого события выполниться только тогда, когда браузер пример последний байт разметки.

Вы либо там какую-то хрень мутите непонятную, либо у вас поселился барабашка в компьютере.
Понятно, что второе мы, здравомыслящие люди, отметаем сразу.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB