Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запустить неизвестную функцию 
V
    Опции темы
bars80080
Дата 24.11.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



что-то я как-то потерялся

надо запустить функцию, имя которой в строке. желательно без eval

задача более полно:
есть функция отвечающая за аякс запрос, она принимает respondfuntion - имя функции-обработчика ответа,

Код

function ajaxQuery(url, query, method, respondfuntion) {
   ...
        if(req.readyState == 4) // respondfuntion(req.responseText);     
}

собсна вопрос, как мне положить в неё результат и запустить на выполнение

к сожалению, в req.responseText могут быть переводы строк и вообще любые символы. поэтому хотелось бы избежать поиска замены всех кавычек и переводов строки, чтоб потом всю строку запихнуть в eval()
PM MAIL WWW   Вверх
comtat
Дата 24.11.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 4
Всего: 71



Цитата(bars80080 @  24.11.2009,  18:05 Найти цитируемый пост)
надо запустить функцию, имя которой в строке. желательно без eval

Кажется мне что никак (( ...
Код

function execFn(_fnName){
    if (typeof _fnName == 'string'){
        _fnName = eval("(" + _fnName + ")");
    }
    _fnName();
}

Цитата(bars80080 @  24.11.2009,  18:05 Найти цитируемый пост)
в req.responseText могут быть переводы строк и вообще любые символы

там не JSON ?



--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
bars80080
Дата 24.11.2009, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



Цитата(comtat @  24.11.2009,  17:43 Найти цитируемый пост)
там не JSON ?

нет, там кусок html

Добавлено через 1 минуту и 42 секунды
Цитата(comtat @  24.11.2009,  17:43 Найти цитируемый пост)
function execFn(_fnName){
    if (typeof _fnName == 'string'){
        _fnName = eval("(" + _fnName + ")");
    }
    _fnName();
}

что-то этого механизма я не понял. а куда здесь передаётся req.responseText?
PM MAIL WWW   Вверх
comtat
Дата 24.11.2009, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 4
Всего: 71



Код

function execFn(_fnName, _params){
    if (typeof _fnName == 'string'){
        _fnName = eval("(" + _fnName + ")");
    }
    _fnName(_params);
}

execFn(respondfuntion, req.responseText);


Только есть сомнения хорошо ли это ... Надеюсь я все верно понял с постановкой задачи.


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
unicross
Дата 24.11.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 6
Всего: 53



Цитата(bars80080 @  24.11.2009,  18:05 Найти цитируемый пост)
надо запустить функцию, имя которой в строке. желательно без eval

Может так (если я правильно понял задачу):
Код

<html>
<head>
<script type="text/javascript">
function f1(msg) {
   alert(msg + ' f1');
}
function f2(msg) {
   alert(msg + ' f2');
}
function f3(msg) {
   alert(msg + ' f3');
}
function ajaxQuery(func, msg) {
   if (window[func])
      window[func](msg);
   else
      alert('Функция не найдена');
}
</script>
</head>
<body>
<input type="button" value="Запустить" onclick="ajaxQuery('f3', 'Привет')">
</body>
</html>

Не тестил во всех браузерах. Возможны проблемы... Кстати, а почему нельзя сразу передать ссылку на функцию через параметр?

PM MAIL WWW   Вверх
bars80080
Дата 25.11.2009, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



Цитата(unicross @  24.11.2009,  21:22 Найти цитируемый пост)
Кстати, а почему нельзя сразу передать ссылку на функцию через параметр?

это как?

у меня задача просто вернуть ответ в нужную функцию.
PM MAIL WWW   Вверх
unicross
Дата 25.11.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 6
Всего: 53



Цитата(bars80080 @  25.11.2009,  00:18 Найти цитируемый пост)
это как?

Указав название функции без скобок:
Код

<html>
<head>
<script type="text/javascript">
function f3(msg) {
   alert(msg + ' f3');
}
function ajaxQuery(func, msg) {
   func(msg);
}
</script>
</head>
<body>
<input type="button" value="Запустить" onclick="ajaxQuery(f3, 'Привет')">
</body>
</html>

PM MAIL WWW   Вверх
IDVsbruck
Дата 25.11.2009, 03:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 8
Всего: 22



Код
if (req.readyState == 4){
    var named_func = window[respondfuntion];
    if (typeof(named_func) == "function") named_func(req.responseText);
}

PM MAIL   Вверх
bars80080
Дата 25.11.2009, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



вот какие штуки оказывается бывают

вариант unicross`а наиболее простой

всем спасибо
PM MAIL WWW   Вверх
Котокобра
Дата 26.11.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.11.2009

Репутация: нет
Всего: 4



а зачем передавать ответ именно через параметр функции? можно передать через глобальную переменную.
PM MAIL   Вверх
bars80080
Дата 26.11.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



когда речь идёт о разных файлах, я на глобальные переменные уже не полагаюсь. 
вдруг уже будет объявлена и в каком-то процессе будет сбой
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0835 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.