版本 Extjs 3.3.1 ??
查看API文档,发现formPanel.getForm()是一个BasicForm对象,submit方法定义如下:
?
submit
(?Object?options
?)
:
BasicForm
-
options
: Object
The options to pass to the action (see doAction for details).
Note: this is ignored when using the standardSubmit option.
The following code:
?
myFormPanel.getForm().submit({ clientValidation: true, url: 'updateConsignment.php', params: { newStatus: 'delivered' }, success: function(form, action) { Ext.Msg.alert('Success', action.result.msg); }, failure: function(form, action) { switch (action.failureType) { case Ext.form.Action.CLIENT_INVALID: Ext.Msg.alert('Failure', 'Form fields may not be submitted with invalid values'); break; case Ext.form.Action.CONNECT_FAILURE: Ext.Msg.alert('Failure', 'Ajax communication failed'); break; case Ext.form.Action.SERVER_INVALID: Ext.Msg.alert('Failure', action.result.msg); } } });
?
would process the following server response for a successful submission:
?
{ "success":true, // note this is Boolean, not string "msg":"Consignment updated" }
?and the following server response for a failed submission:
?
{ "success":false, // note this is Boolean, not string "msg":"You do not have permission to perform this operation" }
?
?
上面API中可以非常明确的看到,这样的submit方法是其实一种异步提交,会返回json字符串,而是否返回成功或失败的根本因素在于json "success"值是否是 true(而且是Boolean类型,非字符串)。这与Ext.ajax.request方法的返回依据是不同的。
?
另外还有很重要的一点,就是上述红色字体所标注的地方
Note: this is ignored when using the standardSubmit option.
?
也就是说,我们定义的formPanel中没有standardSubmit
属性时,就是上述过程。但如果
standardSubmit 为true
,就是同步提交了,也就会忽略
options
参数,在里面定义的url、params都会失效。这个时候需要是用另外的方法,先看下API中关于
standardSubmit属性的定义:
?
?
standardSubmit : Boolean
?
If set to true , standard HTML form submits are used instead of XHR (Ajax) style form submissions. Defaults to false .
?
Note:
When using standardSubmit
, the
options
to submit
are ignored because
Ext's Ajax infrastracture is bypassed. To pass extra parameters (e.g.
baseParams
and params
), utilize hidden fields
to submit extra data, for example:
?
new Ext.FormPanel({ standardSubmit: true, baseParams: { foo: 'bar' }, url: 'myProcess.php', items: [{ xtype: 'textfield', name: 'userName' }], buttons: [{ text: 'Save', handler: function(){ var fp = this.ownerCt.ownerCt, form = fp.getForm(); if (form.isValid()) { // check if there are baseParams and if // hiddent items have been added already if (fp.baseParams && !fp.paramsAdded) { // add hidden items for all baseParams for (i in fp.baseParams) { fp.add({ xtype: 'hidden', name: i, value: fp.baseParams[i] }); } fp.doLayout(); // set a custom flag to prevent re-adding fp.paramsAdded = true; } form.submit(); } } }] });
?
这个时候需要在formPanel本身添加参数baseParams,并在handler中添加相应的处理方法。
?