`
witcheryne
  • 浏览: 1099132 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Ext JS FormPanel 提交数据总结....

阅读更多

    今天研究FormPanel提交表单数据研究了半天.. 终于把表单提交成功了... 趁现在还记得问题,做一下总结:

 

1. 实用FormPanel如何提交表单:

    在Ext中FormPanel并中并不保存表单数据,其中的数据是由BasicForm保存,在提交表单的时候需要获取当前FormPanel中的BasicForm来进行提交. 

              获取FormPanel中的BasicForm对象代码如下:

   

var pnlLogin = new Ext.FormPanel({
    //省略
});

//获取BasicForm对象
pnlLogin.getForm();

 

 在获取BasicForm对象后便可进行表单的提交操作...  此时需要查一下BasicForm 的API文档, 文档中说,需要调用submit();方法进行提交:

BasicForm submit方法API 写道
submit( Object options ) : BasicForm

Shortcut to do a submit action.

Parameters:

* options : Object
The options to pass to the action (see doAction for details)

Returns:

* BasicForm
this

 由API文档可以知道,submit方法实际上是调用了BasicForm的doAction()方法, 而doAction放法在API文档中的描述如下:

   

BasicForm doAction() API 写道
doAction( String/Object actionName, [Object options] ) : BasicForm

Performs a predefined action (Ext.form.Action.Submit or Ext.form.Action.Load) or a custom extension of Ext.form.Action to perform application-specific processing.

Parameters:

* actionName : String/Object
The name of the predefined action type, or instance of Ext.form.Action to perform.
* options : Object
(optional) The options to pass to the Ext.form.Action. All of the config options listed below are supported by both the submit and load actions unless otherwise noted (custom actions could also accept other config options):
o url : String

The url for the action (defaults to the form's url.)
o method : String

The form method to use (defaults to the form's method, or POST if not defined)
o params : String/Object

The params to pass (defaults to the form's baseParams, or none if not defined)
o headers : Object

Request headers to set for the action (defaults to the form's default headers)
o success : Function

The callback that will be invoked after a successful response. Note that this is HTTP success (the transaction was sent and received correctly), but the resulting response data can still contain data errors. The function is passed the following parameters:
+ form : Ext.form.BasicForm
The form that requested the action
+ action : Ext.form.Action
The Action class. The result property of this object may be examined to perform custom postprocessing.

o failure : Function

The callback that will be invoked after a failed transaction attempt. Note that this is HTTP failure, which means a non-successful HTTP code was returned from the server. The function is passed the following parameters:
+ form : Ext.form.BasicForm
The form that requested the action
+ action : Ext.form.Action
The Action class. If an Ajax error ocurred, the failure type will be in failureType. The result property of this object may be examined to perform custom postprocessing.

o scope : Object

The scope in which to call the callback functions (The this reference for the callback functions).
o clientValidation : Boolean

Submit Action only. Determines whether a Form's fields are validated in a final call to isValid prior to submission. Set to false to prevent this. If undefined, pre-submission field validation is performed.

Returns:

* BasicForm
this

 

这里actionName只能是 loadsubmit 当然提交的时候使用submit...

 

看了这么多的API文档, 其实关于表单提交操作并没有结束, 从doAction方法的描述中可以看出.. 这里实际上是调用了Ext.form.Action这个类, 而submit操作是调用了该类的子类Ext.form.Action.Submit...  绕了一大圈,终于把Ext中FormPanel是如何提交表单的原理搞的差不多了.. 那么下来就可以上代码了:

    

var winLogin = new Ext.Window({
	title:'登录',
	renderTo:Ext.getBody(),
	width:350,
	bodyStyle:'padding:15px;',
	id:'login-win',
	buttonAlign:'center',
	modal:true,
	items:[{
		xtype:'form',
		defaultType:'textfield',
		bodyStyle : 'padding:5px',
		baseCls : 'x-plaints',
		url:'ajaxLogin.do',
		method:'POST',
		defaults:{
			anchor:'95%',
			allowBlank:false
		},
		items:[{
			id:'loginName',
			name:'loginName',
			fieldLabel:'用户名',
			emptyText:'请输入用户名',
			blankText:'用户名不能为空'
		},{
			id:'password',
			name:'password',
			fieldLabel:'密码',
			blankText:'密码不能为空'
		}]							
	}],
	buttons:[{
		text:'登录',
		handler:function(){
			//获取表单对象
			var loginForm = this.ownerCt.findByType('form')[0].getForm();
			alert(loginForm.getValues().loginName);
			loginForm.doAction('submit', {
				url:'ajaxLogin.do',
				method:'POST',						
				waitMsg:'正在登陆...',
				timeout:10000,//10秒超时,
				params:loginForm.getValues(),//获取表单数据
				success:function(form, action){
					var isSuc = action.result.success;
					if(isSuc) {
						//提示用户登陆成功
						Ext.Msg.alert('消息', '登陆成功..');
					}										
				},
				failure:function(form, action){
					alert('登陆失败');
				}
			});
			this.ownerCt.close();
		}
	}, {
		text:'重置',
		handler:function(){
			alert('reset');
			this.ownerCt.findByType('form')[0].getForm().reset();
		}
	}]						
});
winLogin.show();

 注意红色的部分...  这里是得到BaiscForm中所有表单元素中的值,并且已String/Object键值对的形式保存。。 该方法在api文档中的描述如下:

BasicForm getValues API 写道
getValues( [Boolean asString] ) : String/Object

Returns the fields in this form as an object with key/value pairs as they would be submitted using a standard form submit. If multiple fields exist with the same name they are returned as an array.
Parameters:

* asString : Boolean
(optional) false to return the values as an object (defaults to returning as a string)

Returns:

* String/Object

 如此提交解决了提交表单时无法发送数据的问题.... 

到这里终于解决了 如何提交表单的问题...

 

2. 为什么没有执行submit中的success方法, failure方法是在什么时候会被执行..

    这里还是需要 查Action类中的success属性的API文档描述...

Action success属性 API 写道
success : Function

The function to call when a valid success return packet is recieved. The function is passed the following parameters:

* form : Ext.form.BasicForm
The form that requested the action
* action : Ext.form.Action
The Action class. The result property of this object may be examined to perform custom postprocessing.

 这里 success方法需要两个参数, 尤其是第二个参数的描述: 尤其result, 这里是可以点击的

点击后随即跳到了Action result属性的描述: 

Action result属性 API 写道
result : Object

The decoded response object containing a boolean success property and other, action-specific properties.

 有此描述可知,服务器返回的响应中需要包含一个 boolean 型的 success 字段, 该字段会保存在result中,Action会通过获取对该字段的描述 来判断是否执行 success 方法。。

    那么服务器如何返回boolean型的success字段呢?   服务器段部分代码如下:

try {
	//返回成功标识
	response.getWriter().println("{success:true}");
	response.getWriter().flush();
} catch (IOException e) {
	e.printStackTrace();
} finally {
	try {
		response.getWriter().close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

 

就这些东西让我研究了一下午...  实在头大...   泡杯茶  休息会先....

11
0
分享到:
评论
2 楼 witcheryne 2009-11-30  
happygis 写道
你好,我也做FORM表单提交,但是为什么我返回的JOSN数据无法取得呢?能否帮我看看是什么问题?代码如下:
C#代码
        context.Response.Write("{success:true,msg:\'safdsafaf\'}");
        context.Response.End();
JS代码:
            handler: function() {
                if (document.getElementById("txtFile").value == '') return;
                //region
                if (!fp.form.isValid()) { return; }
                //添加参数
                params.OverFile = Ext.getCmp('ckOver').getValue();
                fp.getForm().submit({
                    clientValidation: true,
                    waitMsg: '文件上传中....',
                    url: PressURL,
                    method: 'POST',
                    params: params,
                    success: function(form, action) {
                        alert(action.result.msg);
                        win.close(this);
                    },
                    failure: function(action, form) {
                        alert("KK");
                        if (displayCallback)
                            displayCallback(action.result.path, action.result.name, action.result.size, action.result.tp);
                        win.close(this);
                    }
                });

            }

我这边没有asp.net的开发环境, 你贴的代码我没有办法调试....
你用firedebug调试一下,看请求和响应中的数据是否正确...
如果正确,你试着用调用 doAction方法来提交数据..
1 楼 happygis 2009-11-28  
你好,我也做FORM表单提交,但是为什么我返回的JOSN数据无法取得呢?能否帮我看看是什么问题?代码如下:
C#代码
        context.Response.Write("{success:true,msg:\'safdsafaf\'}");
        context.Response.End();
JS代码:
            handler: function() {
                if (document.getElementById("txtFile").value == '') return;
                //region
                if (!fp.form.isValid()) { return; }
                //添加参数
                params.OverFile = Ext.getCmp('ckOver').getValue();
                fp.getForm().submit({
                    clientValidation: true,
                    waitMsg: '文件上传中....',
                    url: PressURL,
                    method: 'POST',
                    params: params,
                    success: function(form, action) {
                        alert(action.result.msg);
                        win.close(this);
                    },
                    failure: function(action, form) {
                        alert("KK");
                        if (displayCallback)
                            displayCallback(action.result.path, action.result.name, action.result.size, action.result.tp);
                        win.close(this);
                    }
                });

            }
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别

    总结,`Ext.FormPanel`的`getForm().submit()`更适合处理基于表单的数据提交,它简化了表单数据的处理和验证,而`Ext.Ajax.request`则提供了更高的灵活性,适用于各种HTTP请求,特别是当需要发送非表单数据或处理...

    Ext+JS高级程序设计.rar

    6.3.5 在form中使用Ext.Direct提交数据 187 6.3.6 使用polling方式进行轮询 189 6.4 本章小结 191 第7章 Store 192 7.1 Store的结构 192 7.2 Ext.data.Field 197 7.3 Ext.data.Record 198 7.4 ArrayReader、...

    ExtJs4.0 表单提交Demo

    总结,"ExtJs4.0 表单提交Demo"旨在展示如何在ExtJs 4.0环境中优雅地处理表单数据提交,同时遵循良好的软件设计原则,将显示层和控制层分离。通过理解和实践这个Demo,开发者能够更好地掌握ExtJs 4.0的表单和Ajax...

    Ext 动态加载表单数据

    在Ext JS这个强大的JavaScript框架中,动态加载表单数据是一种常见的功能需求,特别是在构建数据驱动的应用程序时。本文将深入探讨如何使用JSON格式的数据来实现这一功能,以便于灵活地更新和显示表单内容。 首先,...

    EXT.form组件

    1. `form`:`Ext.FormPanel`是EXT JS中的表单面板,它是一个容器,可以容纳各种表单字段和其他组件。表单面板允许你定义布局、提交行为以及处理表单数据的方法。 2. `checkbox`:`Ext.form.Checkbox`是用于创建复选...

    Ext 添加功能form表单实例

    在这个例子中,通过`new Ext.FormPanel`来创建了一个表单面板,并设置了一些关键属性: - `frame`: 设置为`true`,表示表单周围有一个边框。 - `width` 和 `height`: 分别设置了表单的宽度和高度。 - `layout`: ...

    EXT提交服务器的三种方式

    在EXT中,有三种主要的方式提交数据到服务器,这些方法主要涉及到前端与后端之间的交互,用于处理用户输入的数据并将其发送到服务器进行处理。以下是EXT提交服务器的三种方式的详细说明: 1. **EXT的Form表单AJAX...

    ExtJs 动态添加表单

    var formPanel = Ext.create('Ext.form.Panel', { layout: 'form', items: [] }); ``` 2. **定义表单字段**: 根据需求,我们可以定义各种类型的字段。例如,添加一个文本字段: ```javascript var ...

    ext几个实例

    在EXTJS中,Ext.AJAX和Ext.FormPanel是两个核心组件,它们分别用于异步与服务器进行数据交互和构建用户界面表单。本文将详细介绍如何使用这两个组件构建一个完整的登录案例,包括与MySQL数据库的交互。 **1. Ext....

    ext学习资料ext学习资料

    总结起来,Ext Js通过其丰富的组件库和数据绑定机制,极大地简化了前端开发,使得开发者可以高效地构建功能强大且用户友好的Web应用程序。无论是用于展示表格数据的Grid,收集用户输入的Form,还是用于导航的Tree,...

    extJs中关于formPanel动态添加组件的验证问题

    在EXT JS这个强大的JavaScript框架中,FormPanel是用于创建表单的重要组件,它允许开发者构建交互式的、数据驱动的Web应用程序。FormPanel不仅提供了一种布局管理方式,还支持各种表单元素,如文本框、复选框、下拉...

    Ext_2.2_API(chinese).rar_Ext 2.2 API_ext js 2_ext-2.2 api_ext2.2

    此外,`Ext.form.FormPanel`和相关组件允许创建复杂的表单,支持验证和数据提交。拖放功能允许用户通过简单的拖动操作来交互,增强了用户体验。还有许多其他工具类,如`Ext.util.Format`,提供了一系列实用的格式化...

    extjs4如何给同一个formpanel不同的url_.docx

    在EXTJS4的API中,通常我们会看到一个`url`属性,这个属性指定了FormPanel在提交表单时将数据发送到的服务器端处理地址。然而,如果希望同一个FormPanel实例能够根据不同的上下文提交到不同的URL,我们需要稍微调整...

    ext form 表单提交数据的方法小结

    本文主要总结了EXT表单提交数据的三种常见方法:EXT的form表单AJAX提交、非AJAX提交以及EXT的Ajax类直接提交。 1. EXT的form表单AJAX提交(默认提交方式) EXT的form表单默认采用AJAX方式进行数据提交,这样可以在...

    EXT异步提交FORM表单

    - **解析请求参数**:由于EXT默认是以POST方式提交数据,所以在Action中需要确保能够正确解析这些参数。 ```java @Override public void validate() { if (username == null || username.trim().equals("")) { ...

    Ext form_load

    `Ext.form.Action.Load`用于加载数据,`Ext.form.Action.Submit`用于提交数据。它们都有success和failure回调函数,用于处理请求的结果。 5. **HTTP响应处理**: 成功或失败的判断并不完全依赖于HTTP状态码,而是...

    springMVC整合ext4js

    Spring MVC作为Java后端的主要MVC框架,提供了强大的控制层支持,而Ext4JS则是一个流行的JavaScript库,用于构建富客户端应用。通过整合这两者,我们可以构建出具有高效数据管理和用户友好的界面的Web应用。 首先,...

    Ext Form 示例

    它在Web应用程序中扮演着至关重要的角色,允许用户输入、编辑和提交数据。本示例旨在展示如何使用 Ext Form 来构建基本的表单结构以及与之相关的功能。 在 Ext JS 中,FormPanel 是用来封装表单元素的主要容器。...

    ext简单登录css/js插件

    在这个登录插件中,我们可能使用了EXT中的FormPanel和Button组件来创建登录表单和提交按钮。 2. **CSS样式(ext-all.css)**:`ext-all.css`文件包含了EXT框架的基础样式,用于美化EXT组件的外观。登录插件的CSS...

Global site tag (gtag.js) - Google Analytics