docs: function fire(p) {
      var self = this;
      var data = this.getData();
      data.parameters = ko.utils.stringifyJson(this.params);
      var params = {
          type: p.type || "POST",
          data: p.params || {},
          url: p.url || ServerEvent.DEFAULT.url,
          async: typeof p.async == 'undefined' ? ServerEvent.DEFAULT.async : p.async,
          singleton: p.singleton || ServerEvent.DEFAULT.singleton,
          success: p.success,
          error: p.error,
          dataType: 'json'
      };
      params.data.ctrl = p.ctrl;
      params.data.method = p.method;
      if (this.event) params.data.event = ko.utils.stringifyJson(this.event);
      var preSuccess = p.preSuccess || function () {};
      var orignSuccess = p.success || function () {};
      var orignError = params.error; //|| function(){}
      this.orignError = orignError;
      var deferred = params.deferred;
      if (!deferred || !deferred.resolve) {
          deferred = {
              resolve: function resolve() {}, reject: function reject() {}
          };
      }
      params.success = function (data, state, xhr) {
          if (typeof data === 'string') data = JSON.parse(data);
          if (self.processXHRError(self, data, state, xhr)) {
              preSuccess.call(null, data);
              self._successFunc(data, deferred);
              orignSuccess.call(null, data.custom);
              deferred.resolve();
          } else {
              deferred.reject();
          }
      };
      params.error = function (data, state, xhr) {
          if (typeof data === 'string') data = JSON.parse(data);
          if (self.processXHRError(self, data, state, xhr)) {
              if (orignError) orignError.call(null, data.custom);
              //				self._successFunc(data, deferred)
          } else {
              deferred.reject();
          }
      };
      params.data = extend(params.data, data);
      if ($) $.ajax(params);else ajax(params);
  }