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 :: Обработчик не action.php а функция

 PHP.SU

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


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

> Описание: как это сделать?
filkeith
Отправлено: 12 Сентября, 2011 - 15:06:14
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


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




Вот например начианется скрипт подгрузки страницы
CODE (javascript):
скопировать код в буфер обмена
  1. $.ajax({
  2. url: "action.php",
  3. type: "GET",
  4. и т.д.

в action.php выборка из бД и вывод инфы. Можно ли сделать так, что бы это было написанно не в отдельном файле action.php, а в виде функции (например в этом же файле или другом, что бы не создавать од каждую страницу свой action.php где нужна подгрузка из разных таблиц) т.е. что то типа
CODE (javascript):
скопировать код в буфер обмена
  1. $.ajax({
  2. func: "Show()",//да бред написал, но я образно чтоб вы меня поняли
  3. type: "GET",
  4. и т.д.

надеюсь понятно объяснил, спасибо заранее
 
 Top
SAD
Отправлено: 12 Сентября, 2011 - 15:11:18
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




можно. передаете еще один параметр, например funcName. в качестве значения используйте название функции, которой будете обрабатывать результат. в самом обработчике делаете так
PHP:
скопировать код в буфер обмена
  1.  
  2. $caseFunction = mysql_real_escape_string($_POST['funcName']); // в вашем случае GET
  3. $caseFunction();


как то так

(Отредактировано автором: 12 Сентября, 2011 - 15:14:25)

 
 Top
LIME
Отправлено: 12 Сентября, 2011 - 15:15:42
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




если отличаются только запросы к БД можно еще проще
передавать какой-нибудь идентификатор запроса и/или таблицы
и в зависимости от него формировать строку запроса
чтоб ф-ции не плодить зря
 
 Top
SAD
Отправлено: 12 Сентября, 2011 - 15:17:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




LIME прав. Можно и так. Но думаю это очень редкий случай
 
 Top
filkeith
Отправлено: 12 Сентября, 2011 - 15:25:46
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


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




SAD пишет:
как то так

эм, это хорошо. но как то более наглядно можно?
я так понял будет что то вроде (предположим что php функция вывода называется show() и в ней просто sql запрос и echo)
CODE (javascript):
скопировать код в буфер обмена
  1. $.ajax({
  2. type: "GET",
  3. data: {"num": num,"show":show},

а функция выглядеть будет как то так:
PHP:
скопировать код в буфер обмена
  1. function show()
  2. {
  3. if (isset($_GET[show]))
  4.    {
  5.    $sql=...
  6.    while ($row=mysql_fetch_array($sql){$tab.=...}
  7.    echo $tab;
  8.    }
  9. }

я просто не очень в js

(Отредактировано автором: 12 Сентября, 2011 - 15:26:24)

 
 Top
SAD
Отправлено: 12 Сентября, 2011 - 15:32:50
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




CODE (javascript):
скопировать код в буфер обмена
  1. $.post('async.php',{funcName: 'ratingDefault'}, function(res) {
  2. });
  3.  
  4. $.post('async.php',{funcName: 'getProfile', userid: userid}, function(res) {
  5. });



это я делаю 2 запроса из js


это обработчик
PHP:
скопировать код в буфер обмена
  1.  
  2. $caseFunction = mysql_real_escape_string($_POST['funcName']); // в вашем случае GET
  3. $caseFunction();
  4.  
  5. function ratingDefault() {
  6.   тут делаю запрос и возвращаю результат
  7. }
  8.  
  9. function getProfile() {
  10.   тут делаю запрос и возвращаю результат
  11. }
 
 Top
filkeith
Отправлено: 12 Сентября, 2011 - 16:16:39
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


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




нипанятна Не понял . Простите за глупость, я просто не понимаю что куда, особенно что в async.php и зачем экранирующая $caseFunction. тогда спрошу в наглую в лоб.
вот честно слизаный с одного сайта код js
CODE (javascript):
скопировать код в буфер обмена
  1. <script type="text/javascript" src="js/jquery-1.6.3.js"></script>
  2. <script type="text/javascript">
  3. $(document).ready(function(){
  4.    $("#imgLoad").hide();  //Скрываем прелоадер
  5. });
  6. var num = 10; //чтобы знать с какой записи вытаскивать данные
  7. $(function() {
  8.    $("#load div").click(function(){ //Выполняем если по кнопке кликнули
  9.    $("#imgLoad").show(); //Показываем прелоадер
  10.    $.ajax('j_wall.php',{funcName: 'numshow'}, function(res) {
  11.           url: "action.php",//КАК ПЕРЕДЕЛАТЬ ЭТУ СТРОЧКУ?
  12.           type: "GET",
  13.           data: {"num": num},
  14.           cache: false,
  15.           success: function(response){
  16.                if(response == 0){  // смотрим ответ от сервера и выполняем соответствующее действие
  17.                  //alert("Больше нет записей");
  18.                  $("#imgLoad").hide();
  19.                                  $("#load").hide();
  20.               }else{
  21.                  $("#ajaxcontent").append(response);
  22.                  num = num + 10;
  23.                  $("#imgLoad").hide();
  24.               }
  25.            }
  26.         });
  27.     });
  28. });
  29. </script>

в action.php
PHP:
скопировать код в буфер обмена
  1. if (isset ($_GET['num']))
  2.                 {
  3. //запрос из бд получается через объекты это в общем $db->select
  4. if(mysql_num_rows($db->select) > 0){        
  5.          $num++;
  6.                 while ($row=mysql_fetch_array($db->select))
  7.                                 {
  8.                                 $tab.='<div id="posts"><table width="480"><tr id="other"><td><p align="left">От:&nbsp;<a href="profile.php?id='.$row['author'].'">>>'.$row['author'].'</a></p></td><td><p align="right">'.$row['date'].'</p></td></tr><tr><td colspan="2" rowspan="1">'.$row['text'].'</td></tr><tr id="other"><td></td><td><p align="right"><a href="profile.php?un='.$row['unic'].'&del=1" class="del">Удалить</a></p></td></tr></table></div>';
  9.                                 }
  10.                 echo $tab;
  11.           sleep(1); //Сделана задержка в 1 секунду чтобы можно проследить выполнение запроса
  12.                 }else{
  13.            echo 0; //Если записи закончились
  14.                 }

вот, я хочу всё что в action.php сделать функцией, и допустим она будет на той же странице что и js код. что тогда надо написать в 11 строчке js кода?
 
 Top
SAD
Отправлено: 12 Сентября, 2011 - 16:37:41
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




PHP:
скопировать код в буфер обмена
  1. $caseFunction = mysql_real_escape_string($_GET['funcName']); // в вашем случае GET
  2. $caseFunction();
  3. function getInfo() {
  4.     if (isset ($_GET['num'])) {
  5.         if(mysql_num_rows($db->select) > 0) {        
  6.             $num++;
  7.             while ($row=mysql_fetch_array($db->select))
  8.                 $tab.='<div id="posts"><table width="480"><tr id="other"><td><p align="left">От:&nbsp;<a href="profile.php?id='.$row['author'].'">>>'.$row['author'].'</a></p></td><td><p align="right">'.$row['date'].'</p></td></tr><tr><td colspan="2" rowspan="1">'.$row['text'].'</td></tr><tr id="other"><td></td><td><p align="right"><a href="profile.php?un='.$row['unic'].'&del=1" class="del">Удалить</a></p></td></tr></table></div>';
  9.             echo $tab;
  10.             sleep(1); // работает быстро, сделаем медленее???
  11.         } else{
  12.              echo 0; //Если записи закончились
  13.         }
  14.     }
  15. }


CODE (javascript):
скопировать код в буфер обмена
  1. $.ajax('j_wall.php',{funcName: 'numshow'}, function(res) {
  2.       url: "action.php",
  3.       type: "GET",
  4.       data: {num: num, funcName: 'getInfo'},
  5.       cache: false,
  6.       success: function(response){
  7.            if(response == 0){  // смотрим ответ от сервера и выполняем соответствующее действие
  8.              //alert("Больше нет записей");
  9.              $("#imgLoad").hide();
  10.                              $("#load").hide();
  11.           }else{
  12.              $("#ajaxcontent").append(response);
  13.              num = num + 10;
  14.              $("#imgLoad").hide();
  15.           }
  16.        }
  17.     });
  18. });
 
 Top
filkeith
Отправлено: 13 Сентября, 2011 - 07:52:51
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


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




Ну чуть код подправил и заработало. Только вызвать функцию надо не $caseFunction(); а eval($caseFunction);

(Отредактировано автором: 13 Сентября, 2011 - 08:38:52)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB