Я оформлял такие скрипты в виде консольной команды на PHP.
И работало все по такому принципу:
1) Запускаем команду, она пишет в базу (в специальную табличку) что она запущена
2) На фронтенде запускается ajax который время от времени проверяет табличку с состоянием команды по ее идентификатору.
3) Команда завершилась ошибкой и записала в табличку свое состояние «error» например и сообщение ошибки, ajax запрос увидел это и сообщил уже веб интерфейсу.
4) Команда завершилась успехом — аналогично пункту (3)
SELECT t1.id,
t1.title,
t2.user AS `last_user`,
t2.datetime AS `last_date`
FROM `comments` t2, topics t1
WHERE t1.id=t2.id_topic
ORDER BY t2.id DESC
LIMIT 1
С git'ом, очень удобно!
Можно настроить автоматическую генерацию поддомен под каждую ветку, это позволит отдельно тестить буквально каждую новую фичю!
Затем сливаем все в мастера и деплоим на продакшн :)
Вам нужно переписать ваш код так что бы returnJSON был внутри .done(function(data){ ТУТ retrun data; })…
По тому что ваш return происходит раньше чем сервер возвращает данные, по скольку вы запрашиваете данные с сервера асинхронно.
В данный момент, есть более новые технологи, например: websocket и Long polling.
Websocket однозначно будет работать быстрее и как по мне даже интереснее чем простой ajax с таймаутами.
Обычно подсветка рамки поля и простой текст без рамок снизу поля.
Так же иногда над самой формой в блоке обведенном (например красным) бордером, вывод всех неверно заполненных полей.
У меня как то так.