`

Extjs提交数据

    博客分类:
  • ext
阅读更多

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

文章分类:Web前端

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

 

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

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

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

   

Js代码 复制代码
  1. var pnlLogin = new Ext.FormPanel({   
  2.     //省略   
  3. });   
  4.   
  5. //获取BasicForm对象   
  6. pnlLogin.getForm();  
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是如何提交表单的原理搞的差不多了.. 那么下来就可以上代码了:

    

Java代码 复制代码
  1. var winLogin = new Ext.Window({   
  2.     title:'登录',   
  3.     renderTo:Ext.getBody(),   
  4.     width:350,   
  5.     bodyStyle:'padding:15px;',   
  6.     id:'login-win',   
  7.     buttonAlign:'center',   
  8.     modal:true,   
  9.     items:[{   
  10.         xtype:'form',   
  11.         defaultType:'textfield',   
  12.         bodyStyle : 'padding:5px',   
  13.         baseCls : 'x-plaints',   
  14.         url:'ajaxLogin.do',   
  15.         method:'POST',   
  16.         defaults:{   
  17.             anchor:'95%',   
  18.             allowBlank:false  
  19.         },   
  20.         items:[{   
  21.             id:'loginName',   
  22.             name:'loginName',   
  23.             fieldLabel:'用户名',   
  24.             emptyText:'请输入用户名',   
  25.             blankText:'用户名不能为空'  
  26.         },{   
  27.             id:'password',   
  28.             name:'password',   
  29.             fieldLabel:'密码',   
  30.             blankText:'密码不能为空'  
  31.         }]                             
  32.     }],   
  33.     buttons:[{   
  34.         text:'登录',   
  35.         handler:function(){   
  36.             //获取表单对象   
  37.             var loginForm = this.ownerCt.findByType('form')[0].getForm();   
  38.             alert(loginForm.getValues().loginName);   
  39.             loginForm.doAction('submit', {   
  40.                 url:'ajaxLogin.do',   
  41.                 method:'POST',                         
  42.                 waitMsg:'正在登陆...',   
  43.                 timeout:10000,//10秒超时,   
  44.                 <SPAN style="COLOR: #ff0000">params:loginForm.getValues(),//获取表单数据</SPAN>   
  45.                 success:function(form, action){   
  46.                     var isSuc = action.result.success;   
  47.                     if(isSuc) {   
  48.                         //提示用户登陆成功   
  49.                         Ext.Msg.alert('消息''登陆成功..');   
  50.                     }                                          
  51.                 },   
  52.                 failure:function(form, action){   
  53.                     alert('登陆失败');   
  54.                 }   
  55.             });   
  56.             this.ownerCt.close();   
  57.         }   
  58.     }, {   
  59.         text:'重置',   
  60.         handler:function(){   
  61.             alert('reset');   
  62.             this.ownerCt.findByType('form')[0].getForm().reset();   
  63.         }   
  64.     }]                         
  65. });   
  66. winLogin.show();  
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字段呢?   服务器段部分代码如下:

Java代码 复制代码
  1. try {   
  2.     //返回成功标识   
  3.     <SPAN style="COLOR: #ff0000">response.getWriter().println("{success:true}");</SPAN>   
  4.     response.getWriter().flush();   
  5. catch (IOException e) {   
  6.     e.printStackTrace();   
  7. finally {   
  8.     try {   
  9.         response.getWriter().close();   
  10.     } catch (IOException e) {   
  11.         e.printStackTrace();   
  12.     }   
  13. }  
try {
	//返回成功标识
	response.getWriter().println("{success:true}");
	response.getWriter().flush();
} catch (IOException e) {
	e.printStackTrace();
} finally {
	try {
		response.getWriter().close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

 

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

分享到:
评论

相关推荐

    ExtJs4.0 表单提交Demo

    在“ExtJs4.0 表单提交Demo”中,我们将深入探讨如何在ExtJs 4.0环境下,通过Ext Ajax模块实现表单的数据提交,同时实现显示层和控制层的分离,提升代码的可维护性和可扩展性。 1. **ExtJs 4.0 表单基础** ExtJs ...

    ExtJs实现数据加载和提交经典代码

    2. **actionCfg**:这是一个配置对象,用于定义具体的动作行为,比如提交数据的URL、请求方式等。 ### Action对象的配置数据 在`doAction`方法中,第二个参数是从`load`或`submit`方法传递过来的`Ext.form.Action`...

    extjs加载远程数据

    ### extjs加载远程数据知识点详解 #### 一、基本概念 在现代Web开发中,前后端分离成为一种普遍采用的设计模式。在这种模式下,前端框架(如ExtJS)需要能够高效地与后端进行数据交互。ExtJS提供了一系列强大的...

    extjs最简单的数据绑定和修改

    在“extjs最简单的数据绑定和修改”这个主题中,我们将探讨如何在ExtJS中实现数据的双向绑定以及如何进行数据的修改。 1. 数据模型(Model): 在ExtJS中,数据模型定义了数据对象的结构和属性。创建一个模型类,...

    extjs的数据传递

    - **POST方法**:通常用于提交表单数据到服务器。可以通过普通表单或JSON格式发送数据。 - **GET方法**:适合发送较小量的数据,数据会附加在URL后面作为查询参数。 ##### 2. JSON数据格式 在ExtJS中,推荐使用JSON...

    extjs_php向后台提交json_post的接收方法实例

    总结,当ExtJS使用JSON POST向PHP提交数据时,我们需要在PHP端使用`file_get_contents('php://input')`获取JSON字符串,并通过`json_decode`进行解析。同时,记得检查JSON解析是否成功,以确保数据的完整性和准确性...

    extjs四种异步提交

    在EXTJS中,异步提交数据是常见的操作,主要用于与服务器进行无刷新的数据交互。这里提到了EXTJS的四种异步提交方式,分别是基于EXT JS的Ajax方法、指定HTML表单的Ajax提交、EXT JS自定义表单的提交以及使用Action...

    extjs表单提交例子

    保存提交代码,extjs4.0 // 重置 和 保存 按钮. buttons: [{ text: '重置', handler: function() { this.up('form').getForm().reset(); } }, { text: '保存', /*formBind: true, //only enabled once the ...

    ssh+extjs4.0grid删除数据

    在IT行业中,SSH(Spring、Struts和Hibernate)是一个经典的Java Web开发框架组合,而ExtJS则是一个流行的JavaScript库,用于构建富客户端的Web应用程序,特别是数据网格(Grid)功能。这里我们关注的是如何在SSH...

    Extjs4的FormPanel从后台load json数据的要点

    它允许开发者构建包含多个输入字段、按钮以及其他交互元素的表单,并且提供了大量的功能来帮助处理表单数据,如验证、提交以及数据绑定等。 ### 二、加载JSON数据至FormPanel #### 2.1 基本原理 在Extjs4中,可以...

    EXTJS的COMBOBOX级联实现和数据提交VALUE[文].pdf

    在本文中,我们将深入探讨EXTJS如何实现ComboBox的级联效果,并理解其数据提交VALUE的工作原理。 首先,我们需要创建两个Store对象,一个用于存储“队名称”(storedm),另一个用于存储“井号”(storejh)。每个...

    如何提交Extjs 中的表单

    在ExtJS中,提交表单是一项常见的操作,用于将用户在表单中填写的数据发送到服务器进行处理。本文将详细讲解如何在ExtJS环境中实现表单的提交,并结合Java Web后端进行交互。 首先,我们需要了解ExtJS中的表单组件...

    用EXTJS和C#结合写的数据浏览器

    这样,前端通过发送AJAX请求获取或提交数据,实现前后端的数据交换。 6. **初学者入门**:这个示例适合初学者学习EXTJS和C#的结合使用,以及B/S架构的基本原理。通过这个简单的例子,开发者可以理解前后端的通信...

    ExtJs3.3中文API.CHM_extjs3.3中文文档_

    2. **数据绑定**:ExtJS支持双向数据绑定,使得视图和模型之间的数据同步变得简单。数据源可以是JSON、XML或其他数据格式,与服务器端的数据交互也十分便捷。 3. **布局管理**:框架内置了多种布局方式,如Fit布局...

    ExtJs2.0学习系列

    学习如何使用Ajax请求来获取或提交数据,以及配合JSONP处理跨域问题,是开发动态Web应用的基础。 七、工具栏和菜单 工具栏(Toolbar)和菜单(Menu)在用户界面中起到辅助操作的作用。学习如何创建和定制这些元素,...

    Extjs和后台数据库交互的程序,增删改查

    ExtJS是一种基于JavaScript的前端框架,它用于构建富客户端应用,提供丰富的用户界面组件和强大的数据处理能力。在“Extjs和后台数据库交互的程序,增删改查”项目中,我们将探讨如何利用ExtJS与后台数据库进行数据...

    extjs 导入导出 Exel

    1. 用户上传Excel 文件,EXTJS 通过FileInput 组件或表单提交实现。 2. 文件上传到服务器,后端解析Excel 文件内容,通常使用开源库如Apache POI(Java)或OpenXML SDK(.NET)。 3. 解析后的数据保存到临时存储或者...

    ExtJS教程_完整版

    ExtJS还支持在不刷新页面的情况下进行数据交互,利用AJAX技术从服务器异步获取或提交数据。 ### ExtJS的版本和兼容性 ExtJS的发展经历了多个版本,从1.x到2.x,再到3.x。每一个新版本都是对旧版本的重构和增强,...

    learning extjs 中文版 表单提交

    在EXTJS这个强大的JavaScript框架中,表单提交是应用程序中不可或缺的一部分,特别是在处理用户输入数据和与服务器进行数据交换时。EXTJS提供了丰富的组件和功能,使得构建动态、交互式的Web应用变得更加简单。本篇...

    Extjs3.0 cookbook

    6. **表单(Forms)**:EXTJS的表单组件支持各种输入类型,并提供了表单验证和数据提交的功能。 7. **Ajax通信(Ajax Interactions)**:EXTJS内置的Ajax接口使得与服务器端的异步通信变得简单。 8. **拖放(Drag ...

Global site tag (gtag.js) - Google Analytics