00001 <?php
00002
00011 class TKAJAXRequest extends TKAction {
00012 protected $url;
00013 protected $options = array();
00014 protected $method = 'get';
00015 protected $callbackActions;
00016
00017 protected static $count = 0;
00018
00030 public function __construct($url, $options, $method = 'get', $callbackActions = array()) {
00031 parent::__construct();
00032
00033 $this->url = $url;
00034 $this->options = $options;
00035 $this->callbackActions = $callbackActions;
00036
00037 $GLOBALS['prm']->setOption('prototype', true);
00038 }
00039
00048 public function setUrl($url) {
00049 $this->url = $url;
00050 }
00051
00061 public function setOption($opt, $val) {
00062 $this->options[$opt] = $val;
00063 }
00064
00073 public function setMethod($method) {
00074 $this->method = $method;
00075 }
00076
00085 public function addCallbackAction($action) {
00086 $this->callbackActions[] = $action;
00087 }
00088
00096 public function getInvocation() {
00097 $params = '';
00098 foreach($this->options as $opt => $val) {
00099 if($val === true)
00100 $params .= "'$opt': true,\n";
00101 else if($val === false)
00102 $params .= "'$opt': false,\n";
00103 else
00104 $params .= "'$opt': '$val',\n";
00105 }
00106 $params = rtrim($params, ",\n");
00107
00108 $actions = '';
00109 foreach($this->callbackActions as $action) {
00110 if(is_string($action))
00111 $actions .= "$action;\n";
00112 else
00113 $actions .= $action->getInvocation() . ";\n";
00114 }
00115
00116 $i = self::$count++;
00117
00118 $js = <<<END_JAVASCRIPT
00119 function doAjax$i() {
00120 new Ajax.Request('$this->url', {
00121 method: '$this->method',
00122 parameters: {
00123 $params
00124 },
00125
00126 onSuccess: function(transport) {
00127 $actions
00128 },
00129
00130 onFailure: function() {
00131 alert('Ajax request failed...');
00132 }
00133 });
00134 }
00135
00136 END_JAVASCRIPT;
00137
00138 $this->addExtraJS('tk2_ajax_req_' . $i, $js);
00139
00140 return "doAjax$i()";
00141 }
00142 }
00143
00144 ?>