4 * Copyright(c) 2006-2007, Ext JS, LLC.
6 * Originally Released Under LGPL - original licence link has changed is not relivant.
9 * <script type="text/javascript">
13 * @class Roo.form.Action
14 * Internal Class used to handle form actions
16 * @param {Roo.form.BasicForm} el The form element or its id
17 * @param {Object} config Configuration options
21 // define the action interface
22 Roo.form.Action = function(form, options){
24 this.options = options || {};
27 * Client Validation Failed
30 Roo.form.Action.CLIENT_INVALID = 'client';
32 * Server Validation Failed
35 Roo.form.Action.SERVER_INVALID = 'server';
37 * Connect to Server Failed
40 Roo.form.Action.CONNECT_FAILURE = 'connect';
42 * Reading Data from Server Failed
45 Roo.form.Action.LOAD_FAILURE = 'load';
47 Roo.form.Action.prototype = {
49 failureType : undefined,
54 run : function(options){
59 success : function(response){
64 handleResponse : function(response){
68 // default connection failure
69 failure : function(response){
70 this.response = response;
71 this.failureType = Roo.form.Action.CONNECT_FAILURE;
72 this.form.afterAction(this, false);
75 processResponse : function(response){
76 this.response = response;
77 if(!response.responseText){
80 this.result = this.handleResponse(response);
84 // utility functions used internally
85 getUrl : function(appendParams){
86 var url = this.options.url || this.form.url || this.form.el.dom.action;
88 var p = this.getParams();
90 url += (url.indexOf('?') != -1 ? '&' : '?') + p;
96 getMethod : function(){
97 return (this.options.method || this.form.method || this.form.el.dom.method || 'POST').toUpperCase();
100 getParams : function(){
101 var bp = this.form.baseParams;
102 var p = this.options.params;
104 if(typeof p == "object"){
105 p = Roo.urlEncode(Roo.applyIf(p, bp));
106 }else if(typeof p == 'string' && bp){
107 p += '&' + Roo.urlEncode(bp);
110 p = Roo.urlEncode(bp);
115 createCallback : function(){
117 success: this.success,
118 failure: this.failure,
120 timeout: (this.form.timeout*1000),
121 upload: this.form.fileUpload ? this.success : undefined
126 Roo.form.Action.Submit = function(form, options){
127 Roo.form.Action.Submit.superclass.constructor.call(this, form, options);
130 Roo.extend(Roo.form.Action.Submit, Roo.form.Action, {
135 // run get Values on the form, so it syncs any secondary forms.
136 this.form.getValues();
138 var o = this.options;
139 var method = this.getMethod();
140 var isPost = method == 'POST';
141 if(o.clientValidation === false || this.form.isValid()){
142 Roo.Ajax.request(Roo.apply(this.createCallback(), {
143 form:this.form.el.dom,
144 url:this.getUrl(!isPost),
146 params:isPost ? this.getParams() : null,
147 isUpload: this.form.fileUpload
150 }else if (o.clientValidation !== false){ // client validation failed
151 this.failureType = Roo.form.Action.CLIENT_INVALID;
152 this.form.afterAction(this, false);
156 success : function(response){
157 var result = this.processResponse(response);
158 if(result === true || result.success){
159 this.form.afterAction(this, true);
163 this.form.markInvalid(result.errors);
164 this.failureType = Roo.form.Action.SERVER_INVALID;
166 this.form.afterAction(this, false);
169 handleResponse : function(response){
170 if(this.form.errorReader){
171 var rs = this.form.errorReader.read(response);
174 for(var i = 0, len = rs.records.length; i < len; i++) {
175 var r = rs.records[i];
179 if(errors.length < 1){
183 success : rs.success,
189 ret = Roo.decode(response.responseText);
193 errorMsg: "Failed to read server message: " + response.responseText,
203 Roo.form.Action.Load = function(form, options){
204 Roo.form.Action.Load.superclass.constructor.call(this, form, options);
205 this.reader = this.form.reader;
208 Roo.extend(Roo.form.Action.Load, Roo.form.Action, {
212 Roo.Ajax.request(Roo.apply(
213 this.createCallback(), {
214 method:this.getMethod(),
215 url:this.getUrl(false),
216 params:this.getParams()
220 success : function(response){
221 var result = this.processResponse(response);
222 if(result === true || !result.success || !result.data){
223 this.failureType = Roo.form.Action.LOAD_FAILURE;
224 this.form.afterAction(this, false);
227 this.form.clearInvalid();
228 this.form.setValues(result.data);
229 this.form.afterAction(this, true);
232 handleResponse : function(response){
233 if(this.form.reader){
234 var rs = this.form.reader.read(response);
235 var data = rs.records && rs.records[0] ? rs.records[0].data : null;
237 success : rs.success,
241 return Roo.decode(response.responseText);
245 Roo.form.Action.ACTION_TYPES = {
246 'load' : Roo.form.Action.Load,
247 'submit' : Roo.form.Action.Submit