В данной статье я на примере AJAX формы обратной связи расскажу как реализовать AJAX в CMS MODx Revolution. Для этого нам необходимо создать ресурс с пустым шаблоном, в настройках которого необходимо отключить визуальный редактор и убрать чекбокс "Доступен для поиска". Вы можете посмотреть как это реализовано у меня на скриншотах ниже:

AJAX в MODx Revo AJAX в MODx Revo

В содержимом ресурса мы вызываем сниппет, который нам отдаст результат. Это может быть pdoResources, getResources и т.д. В нашем случае, у нас будет следующий вызов FormIt:

 [ [!FormIt?
   &hooks=`spam,math,email,FormItSaveForm`
   &emailTpl=`zayChunk`
   &emailSubject=`Вам сообщение с сайта artemblog.ru`
   &emailTo=`info@artemblog.ru`
   &formName=`Заявка`
   &mathMinRange=`1`
   &mathMaxRange=`10`
   &formName=`Обратная связь`
   &validate=`math:required`
] ][ [!+fi.error.math] ]

Так как на сайте у меня используется Bootstrap, я вывожу данную форму в модальном окне. Код модального окна:

 <!-- Modal -->
<div class="modal fade" id="consult" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
	  <form action="[ [~112] ]" method="POST" id="consultform">
		<div class="modal-header">
		  <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
		  <h4 class="modal-title" id="myModalLabel">Получить консультацию</h4>
		</div>
		<div class="modal-body">
		  <div class="message"></div>
		  <div class="form-group">
			<label for="email">Ваше имя</label>
			<input type="text" class="form-control" id="name" name="name" placeholder="Имя" required>
		  </div>
		  <div class="form-group">
			<label for="email">Ваш email</label>
			<input type="email" class="form-control" id="email" name="email" placeholder="Email" required>
		  </div>
		  <div class="form-group">
			<label for="phone">Ваш телефон</label>
			<input type="text" class="form-control phone" id="phone" name="phone" placeholder="Телефон" required>
		  </div>
		  <div class="form-group">
			<label for="text">Текст</label>
			<textarea name="text" class="form-control"></textarea>
		  </div>
		  <div class="form-group">
			<label>Решите пример - [ [!+fi.op1] ] [ [!+fi.operator] ] [ [!+fi.op2] ]?</label>
			[ [!+fi.error.math] ]
			<input class="form-control" type="text" name="math" value="" />
			<input type="hidden" name="op1" value="[ [!+fi.op1] ]" />
			<input type="hidden" name="op2" value="[ [!+fi.op2] ]" />
			<input type="hidden" name="operator" value="-" />
		  </div>
		</div>
		<div class="modal-footer">
		  <button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button>
		  <button type="submit" class="btn btn-primary">Отправить</button>
		</div>
	  </form>
    </div>
  </div>
</div>

И еще нам необходим скрипт обработки, у меня он написан на jQuery:

 $(document).ready(function(){
	$('#consultform').submit(function(e){
	  e.preventDefault();
	  var msg = $(this).serialize();
	  var url = $(this).attr('action');
	  
		$.ajax({  
		  type: "POST",  
		  url: url, 
		  data: msg,
		  success:  function(data) { 
		    if (data){
			$('#consult .message').html('<div class="alert alert-danger" role="alert">'+data+'</div>');
			}else{
			$('#consult .message').html('<div class="alert alert-success" role="alert">Сообщение отправлено!</div>');
			}
		} 
	  }); 
	  return false;
	});
  })

Данная конструкция должна работать, если вы все верно разместите в шаблоне. В принципе, MODx очень гибок, и можно делать с данной системой все, что душа пожелает.