Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2011, 09:29   #1
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию Чем заменить eval()?

Есть ajax-система. На запросы пользователя сервер отвечает js-кодом (например, alert("Бум!!"); ). На клиенте ответ прогоняется через eval() и команда выполняется.
Profit...

Но многие говорят, что это не безопасно, хотя внятно не могут объяснить почему (?). Говорят, что eval() медленная команда. Возникает вопрос:

- Чем заменить eval()?

Закинул вопрос на Хабр и получил около десятка бредовых ответов (что и следовало ожидать) и один требующий проверки. А как думают знатоки этого форума?
Виталий Желтяков вне форума Ответить с цитированием
Старый 27.05.2011, 06:59   #2
verygood
Пользователь
 
Регистрация: 22.06.2010
Сообщений: 61
По умолчанию

В некоторых случаях можно использовать window[], мне удавалось.
verygood вне форума Ответить с цитированием
Старый 27.05.2011, 23:47   #3
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию я думаю....

Я думаю что логику которая подвластна JS не нужно заменять PHP, может просто все нужные параметры передавать (в массиве например, json-ом очень легко манипулировать)...
8oOoRPM вне форума Ответить с цитированием
Старый 28.05.2011, 02:27   #4
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Поддерживаю 8oOoRPM. С сервера данные приходят, например, в json формате, а в js скрипте с ними творишь, что хочешь. Если указать тип возвращаемых данных, тот же json, то eval не нужен
Gorychev вне форума Ответить с цитированием
Старый 28.05.2011, 07:25   #5
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

А как поступать с управляющими командами? (см. 1 сообщение)
Виталий Желтяков вне форума Ответить с цитированием
Старый 28.05.2011, 23:26   #6
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию

А управляющие комманды это alert("bum") ? )))
Нужно реализовывать бэкэнд и фронтенд правельно, потому как eval() это не совсем то что хочется увидеть... Если нужно будет добавить какойнить параметр новый, то придётся переколбасить и серверную часть и клиентскую... это просто не практично...А eval() заменить не вижу возможным, во первых потому что разработчики сделали его достаточно быстрым... Советую поменять логику, ну или показать пример чтоб можно было увидеть(нам) что eval() действительно незаменим...
8oOoRPM вне форума Ответить с цитированием
Старый 29.05.2011, 07:39   #7
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Допустим, у нас на клиенте есть две команды - function_a() и function_b(). Каждая из них принимает параметры и выполняет различные действия.
Я делал просто. С сервера отправляется на запрос пользователя ответ, например - "function_a('XXX'); fuction_b('ZZZ');". На клиенте полученный ответ прогонялся через eval() и всё было хорошо.

Но очень много людей говорят, что это не безопасно и медленно. Поэтому возникает вопрос как заменить?
Виталий Желтяков вне форума Ответить с цитированием
Старый 30.05.2011, 21:57   #8
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию

вообще с безопасностью я не знаю что это имеет... медленно ? ДА!!! Как и любом другом языке в подобных функциях... а евал для этих функции и не нужен та... передаёте массив параметров с сервера, а клиент запускает функцию с переданными параметрами, евал сдесь не нужен совсем... смотрите, как вам удобнее...
8oOoRPM вне форума Ответить с цитированием
Старый 30.05.2011, 21:58   #9
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию

И думаю что при маленьких объёмах данных разницы во времени будет назаметно в любом случае...
8oOoRPM вне форума Ответить с цитированием
Старый 30.05.2011, 22:15   #10
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Вот сокращенная версия рабочего кода, без проверок и т.п.
Код:
fromId = 'addComment';
	$('#'+fromId).submit(function() {
		  var str = $("#"+fromId).serialize();	
		  $.post('/events.html, str, 
					function(reply){
						if(reply.success){
							alert(reply.msg);
                                                        // можно вызвать функцию, что угодно, с параметрами которые пришли с сервера
						}else{
							alert('Error!!!!');
						}
					},'json'
				);  		
});	
	..............
	 php
			обработка 
			if(условие == true){				
				переменные
				передаем
				$msg = 'Все получилось!!!!';
				echo json_encode(array('success' => true,'msg'=>$msg));
			}else{
					echo json_encode(array('success' => false));
				}	
			exit();
eval не нужен,

Последний раз редактировалось Gorychev; 30.05.2011 в 22:18.
Gorychev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем заменить функцию? kity Помощь студентам 8 29.06.2010 16:08
Чем заменить assign pasha_1994 Помощь студентам 6 21.12.2009 12:29
чем заменить goto? Agronom Общие вопросы C/C++ 3 19.12.2009 19:43
Чем заменить GetFreeSystemResources? rocky7 Компоненты Delphi 0 23.08.2009 20:20