Source: transport.js

/**
 * Обмен данными с сервером
 */
var Transport = Object.extend({
  //data: null,

  /** 
   * Отправка запроса на сервер
   *
   * @param {Object} params Объект с параметрами, который содержит возможные
   * свойства
   * * {String} section Раздел, в котором должен отработать метод на сервере
   * * {String} class Название объекта, в котором содержится метод
   * * {String} method Метод/событие, которое необходимо вызвать на сервере
   * * {Object} [parameters] Параметры для передачи на сервер
   * * {function} [onSuccess] Обработчик, который должен быть вызван 
   * после получения ответа с сервера
   * * {function} [skipErrors] Массив кодов ошибок, которые надо пропустить
   * (с которыми допускается вызвать обработчик)
   *
   * @example
   * irisControllers.classes.dc_Account_Link = IrisCardController.extend({
   *   onAfterSave: function (p_rec_id, p_mode) {
   *     // После сохранения добавляем ссылку к связанной компании, 
   *     // если такая связь отсутствует
   *     Transport.request({
   *       section: 'Account', 
   *       'class': 'dc_Account_Link', 
   *       method: 'checkReverseLink', 
   *       parameters: {
   *         id: p_rec_id
   *       }
   *     });
   *   }
   * });
   */
  request: function(params) {
    if (params.section == undefined || 
        params['class'] == undefined || 
        params.method == undefined) {
      return;
    }
    // Формируем параметры для передачи на сервер
    var parameters = {
      irisConfigSection: params.section,
      irisConfigClass: params['class'],
      irisConfigMethod: params.method
    };
    if (params.parameters !== undefined) {
      for (key in params.parameters) {
        parameters['param_'+key] = Object.toJSON(params.parameters[key]);
      }
    }

    // Передаём данные на сервер
    new Ajax.Request(g_path + '/core/engine/router.php', {
      parameters: parameters,
      onSuccess: function(response) {
        if (response.readyState == 4) {
          var result = response.responseText.evalJSON();
          if ('error' in result) {
            if ((result.error.code == undefined) ||
                (params.skipErrors == undefined) ||
                (params.skipErrors.indexOf(result.error.code) == -1)) {
              // TODO: Стилизация
              alert(result.error.message);
              return;
            }
          }
          // Если ошибок не возникло или ошибка пропускается, то вызовим колбек
          if (params.onSuccess !== undefined) {
            params.onSuccess(response);
          }
        }
      }
    });
  }

});