Это может быть опасно, если в ответе содержатся данные, каким-либо образом поступившие от пользователя. Другое дело, что в большинстве случаев eval не нужен.
Приведённый пример это демонстрирует. Вместо того, чтобы возвращать JS-код и исполнять его:
Код:
eval("PrintData(message,'t7','Логин свободен.');");
можно возвращать с сервера только нужные данные (в данном случае - сообщение "Логин свободен.") и вызывать функцию:
Код:
PrintData(message,'t7',req.responseText);
Тем более, что нет смысла исполнять код
eval("PrintData(message...)");, если message всё равно определяется в JS. Кроме того, такой код будет сложнее поддерживать - если нужно будет изменить JS, то придётся редактировать и серверный код, поскольку там дублируются имена переменных.
Ах, да. Ещё eval – это зло

.