Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.05.2011, 19:49
Кандидат Javascript-наук
Отправить личное сообщение для Slavenin Посмотреть профиль Найти все сообщения от Slavenin
 
Регистрация: 20.11.2010
Сообщений: 143

Вызов конкретной функции класса на php AJAX запросом
Всем доброго времени суток! Подскажите пожалуйста можно ли вызвать конкретную функцию нужного класса, написанного на пхп, через ajax запрос? Или все-таки стоит написать маршрутизатор для этих целей?
Ответить с цитированием
  #2 (permalink)  
Старый 30.05.2011, 13:45
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

Лучше, если клиентский код не будет ничего знать о серверном — и уж тем более, какие там классы и методы.
Ответить с цитированием
  #3 (permalink)  
Старый 30.05.2011, 19:56
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Можно, оправляете AJAX запрос на сервер и передаете название класса и метода.
А на сервере уже может быть что то типа:
$class = $_GET['class_name'];
$method = $_GET['method_name'];
$c = new $class();
$c->{$method}();


Или это не то ?))
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #4 (permalink)  
Старый 31.05.2011, 22:13
Кандидат Javascript-наук
Отправить личное сообщение для Slavenin Посмотреть профиль Найти все сообщения от Slavenin
 
Регистрация: 20.11.2010
Сообщений: 143

Сообщение от walik Посмотреть сообщение
Можно, оправляете AJAX запрос на сервер и передаете название класса и метода.
А на сервере уже может быть что то типа:
$class = $_GET['class_name'];
$method = $_GET['method_name'];
$c = new $class();
$c->{$method}();


Или это не то ?))
не то что бы не то, просто для анализа передаваемых данных нужно писать отдельный скрипт, что-то типа маршрутизатора с анализом параметров и прочими наворотами. В общем, как я понял обратиться сразу к конкретной функции нельзя. Да и прав hogart лучше действительно не оставлять следов на стороне клиента
Ответить с цитированием
  #5 (permalink)  
Старый 31.05.2011, 22:53
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Даже если Вы и "не наследили на стороне клиента" - это абсолютно не избавляет Вас от проверок на стороне сервера, от написания как Вы говорите "маршрутизатора", т.к. рано или поздно все "секретные" названия функций, имен, классов, таблиц и т.д. хакеры узнают.
Распространенный подход: отправляйте в аджакс-запросе не осмыссленные названия функций типа "DeleteAllMayDocuments", а просто цифровой параметр 1...1000. В PHP ставите минимальную проверку:
$param = $_GET['param'];
settype($param,"integer");
if ($param == 0) exit;
// далее switch ($param) ... case ...

Это обезопасит от злостных вызовов...
Ответить с цитированием
  #6 (permalink)  
Старый 02.06.2011, 23:52
Кандидат Javascript-наук
Отправить личное сообщение для Slavenin Посмотреть профиль Найти все сообщения от Slavenin
 
Регистрация: 20.11.2010
Сообщений: 143

ну да я именно так и сделал теперь вот думаю, как определить количество параметров которые должны передаваться в функцию, сам список функций получить не проблема. Разве что прописать в отдельном массиве связку функция->количество параметров и оттуда черпать инфу. и процесс построения вызова функции похоже придется делать через eval, что мне крайне не нравится, но иного способа я пока не вижу.
__________________

Ответить с цитированием
  #7 (permalink)  
Старый 03.06.2011, 12:24
Кандидат Javascript-наук
Отправить личное сообщение для Slavenin Посмотреть профиль Найти все сообщения от Slavenin
 
Регистрация: 20.11.2010
Сообщений: 143

нашел способ действия без eval через функцию php
call_user_func_array()

но проблемы с вызовом конструктора это не решает, так как до создания объекта функция не определена
нерешаемых проблем не бывает хотя пришлось все же юзать eval()...
__________________


Последний раз редактировалось Slavenin, 03.06.2011 в 13:03.
Ответить с цитированием
  #8 (permalink)  
Старый 03.06.2011, 13:14
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от Slavenin Посмотреть сообщение
теперь вот думаю, как определить количество параметров которые должны передаваться в функцию
Вы, пожалуйста, пишите о каком языке идет речь? О javascript на стороне Клиента, или о PHP на сервере?
Если это javascript, то на клиентской стороне ничего "определяться" не должно. Там должно быть всё зашито жестко, т.е. нажал юзер кнопку - на сервер отправилась "1", нажал другую - на сервер отправилось "2".
А на PHP просто напишите массив, в индексах которого будут названия Ваших php-функций. При этом диапазон приходящих параметров (1...n) проверяйте по размерности этого массива.
Ответить с цитированием
  #9 (permalink)  
Старый 03.06.2011, 22:47
Кандидат Javascript-наук
Отправить личное сообщение для Slavenin Посмотреть профиль Найти все сообщения от Slavenin
 
Регистрация: 20.11.2010
Сообщений: 143

на стороне клиента, естественно, ничего создаваться не будет, оттуда действительно будут идти бессмысленные цифры и буквы. а вот на стороне сервера я сделаю несколько иначе через функцию call_user_func_array
__________________

Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Вызов функции печати страницы полученной через AJAX Garik AJAX и COMET 4 02.03.2011 17:05
return функции с ajax запросом !? namo86 AJAX и COMET 2 19.01.2011 19:30
Вызов функции PHP по нажатии на Button vah-smile Элементы интерфейса 8 14.07.2010 11:32
Вызов php функции frolvict Общие вопросы Javascript 8 29.04.2010 20:51