Jquery异步提交表单到Action

转载请注明出处:jiq?钦‘s
technical Blog

一 需求

出于兴趣最近在做分布式注册中心的管理界面,其中一个模块是左边的树显示所有ZooKeeper节点,使用的ztree实现,点击树节点的时候会查询后台action返回节点数据,显示在右边区域,为了不刷整个页面,所以采用的是Jquery的异步请求Action返回JSON数据,参考我的这篇文章,然后使用Jquery的load函数载入显示节点信息的nodeInfo.jsp,以返回的JSON数据为参数。

效果如下:

现在的需求是:我要在编辑好了节点信息后,点击保存,请求action保存节点数据,要求当前页面不跳转,并且弹出保存成功的提示信息。和点击左边树节点刷新右边节点信息区域类似,这就要用到Jquery的异步表单提交了。

二 解决方案

节点信息区域以一个表单承载,代码如下:

<form class="form-horizontal" method="post" id="nodeInfoForm">
			<fieldset>
				<div class="form-group">
					<label class="col-lg-2 control-label">名    称:</label>
				    <div class="col-lg-9">
				    	<input id="configName" value="<%=node.getName() %>" name="configNode.name"
				    	type="text" class="form-control" placeholder="请输入名称" readonly>
				    </div>
				    <div class="col-lg-1"></div>
			    </div>
			    <div class="form-group">
				    <label class="col-lg-2 control-label">路    径:</label>
				    <div class="col-lg-9">
				    	<input id="configPath" value="<%=node.getPath() %>" name="configNode.path"
				    	type="text" class="form-control" placeholder="请输入路径" readonly>
				    </div>
				    <div class="col-lg-1"></div>
			    </div>
			    <div class="form-group">
				    <label class="col-lg-2 control-label">配置值:</label>
				    <div class="col-lg-9">
				    	<input id="configValue" value="<%=node.getValue() %>" name="configNode.value"
				    	type="text" class="form-control" placeholder="请输入值">
				    </div>
				    <div class="col-lg-1"></div>
			    </div>
			    <div class="form-group">
				    <label class="col-lg-2 control-label">属性值:</label>
				    <div class="col-lg-9">
				    <div class="panel panel-default">
					    <div class="bootstrap-admin-panel-content">
					    	<table style="font-size:13px" class="table table-hover table-condensed table-bordered">
					    		<thead>
						    		<tr>
							    		<th>属性名称</th>
							    		<th>属性值</th>
						    		</tr>
					    		</thead>
					    		<tbody>
					    			<%
					    				HashMap<String, String> attributes = node.getAttributes();
					    				if(attributes != null && attributes.size() > 0)
					    				{
					    					Iterator<String> iterator = attributes.keySet().iterator();
					    					while(iterator.hasNext())
					    					{
					    						String key = iterator.next().toString();
					    						String value = attributes.get(key).toString();
					    			%>
					    						<tr class="active">
					    							<td><%=key%></td>
					    							<td><%=value %></td>
					    						</tr>
					    			<%
					    					}
					    				}
					    			%>
					    		</tbody>
					    	</table>
					    </div>
				    </div>
				    </div>
				    <div class="col-lg-1"></div>
			    </div>
			    <div class="form-group">
				    <label class="col-lg-2 control-label">描    述:</label>
				    <div class="col-lg-9">
				    	<textarea id="configDescrip" name="configNode.description" class="form-control"
				    	rows="2" placeholder="请输入描述" ><%=node.getDescription() %></textarea>
				    </div>
				    <div class="col-lg-1"></div>
			    </div>
			    <div class="form-group">
				    <div class="col-lg-1"></div>
				    <div class="col-lg-4">
				    	<button id="btnFormSubmit" type="button" class="btn btn-primary">保存</button>
				    	<button id="btnFormReset" type="button" class="btn btn-default">重置</button>
				    </div>
				    <div id="myAlert" class="col-lg-6"></div>
					<div class="col-lg-1"></div>
			    </div>
			</fieldset>
		</form>

异步提交表单的JQuery代码如下:

$(document).ready(function () {
	        $("#btnFormSubmit").click(function () {
	        	$.ajax({
		            type: "POST",
		            url: "SaveNodeInfo.action",
		            data: $("#nodeInfoForm").serialize(),
		            dataType: "text",
		            success: function(data) {
		            	var response = eval("("+data+")");
		            	if (data.length > 0 && response=='success')
		            	{
		            		$("#myAlert").html('<div class="alert alert-success"><strong>节点信息保存成功!</strong></div>');
		            	}
		            	else
		            	{
		            		$("#myAlert").html('<div class="alert alert-warning"><strong>节点信息保存失败!</strong></div>');
		            	}
		            },
		            error: function() {
		            	$("#configInfo").load("error.jsp");
		            }
		        }); 

	            return false;
	        });
	    });

和异步请求action返回json类似,这里action实现如下:

public String SaveNodeInfo() throws Exception
	{
		if(configNode != null)
		{
			System.out.println(configNode.getDescription());
			System.out.println(configNode.getValue());
			//spMap
			System.out.println(configNode.getAttributes());
			System.out.println(attrKey);
		}
		else
		{
			System.out.println("configNode对象为空");
		}
		//save node info...

		this.saveResult = "success";
		return SUCCESS;
	}

struts.xml中action配置为:

<action name="SaveNodeInfo" class="org.zk.action.ConfigManageAction" method="SaveNodeInfo">
            <result name="success" type="json">
            	<param name="root">saveResult</param>
            </result>
        </action>

注意saveResult为action内部变量,需要提供get方法前台页面才能取得这个返回值。

可以看到异步请求成功后,如果返回的是succes自定义字符串,则提示成功信息,否则提示失败信息。

备注:可以看到提交到Action的表单中输入控件使用了name="obj.attribute"的写法,这样只要action中定义了obj对象,并且提供set方法,那么页面请求action的时候会自动将表单中的obj对象注入到action中的这个obj变量中。

时间: 2024-12-15 06:54:00

Jquery异步提交表单到Action的相关文章

JQuery 异步提交表单

1.使用post提交方式 2.构造表单的数格式 3.结合form表单的submit调用ajax的回调函数. 使用 jQuery 异步提交表单代码: 代码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>无标题页</title> </head> <script src="js/jquery-1.4.2.js"></sc

Jquery 异步提交表单(post)

方法  $.post(url,params,function(data){}); 表单的action,method属性都没有 button的type不能为submit只能为button 前台代码 <script type="text/javascript"> $(function()         {    //异步提交表单  $("#save").click(function(){      $.post("${ctx}/order/sav

ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码

首先提出一个问题:在做网站开发的时候,用到了验证码来防止恶意提交表单,那么要如何实现当验证码错误时,只是刷新一下验证码,而其它填写的信息不改变? 先说一下为什么有这个需求:以提交注册信息页面为例,一般注册都需要用户填一个验证码信息(防止机器恶意注册),并且这个验证码会提交到后台去进行比对,若是错了则不会检查其他提交信息而直接返回浏览器端提示验证码错误.若是简单地用form表单直接将数据提交到指定的url,当验证码填写错误的信息返回浏览器端的时候,不可避免整个页面都会重新刷新一次,这是用户所不想要

JQuery ajax提交表单及表单验证

JQuery ajax提交表单及表单验证 博客分类: jsp/html/javascript/ajax/development Kit 开源项目 注:经过验证,formValidator只适合一个页面不超过一个表单的情况. 本例实现功能:通过ajax提交表单,并在提交表单前对表单的数据进行验证. 主要通过两个插件实现: 第一个: jQuery Form Plugin http://jquery.malsup.com/form 主要功能是ajax提交表单 第二个:jQuery formValida

SpringMVC中的异步提交表单

1.前言 近期在做一个项目,前台框架用的是EasyUI+SpringMVC,因为对SpringMVC不太了解,所以刚開始接触的时候有点吃力,在此通过一个EasyUi中的DataGrid表格来总结一下.  2.SpringMVC中的View向控制器传參 在SpringMVC中,View怎样向控制器传參数呢? 尤其是Form表单提交的时候,详细有例如以下几种方式 2.1 HttpServletRequest 能够通过getParameter()方法来获取前台传过来的參数 2.2 Form表单绑定 /

jquery回车提交表单

jquery回车提交表单,比较方便的功能. 三个事件keydown,keypress,keyup,分别是按下,按着没上抬,上抬键盘 ,所以用keyup. $(document).keyup(function(event){ if(event.keyCode ==13){ $("#submit").trigger("click"); }});

前端笔记-jquery ajax提交表单

jquery ajax提交表单 最近才发现,jquery ajax提交表单可以这么简单 $.ajax({ url: "udpate", type:"POST", data:$('#formId').serialize(), success: function(data){ alert(data); }, error:function(data){ }}); } 关键在于data:$('#formId').serialize(),这里的formId就是表单的Id. 以

使用ajax异步提交表单

虽然这篇文章的标题是提交表单,但是主要的难点在于使用ajax提交文本域的内容, 在工作中的经常会需要ajax跨域的问题,通常的需求使用jsonp就可以得到解决,但是当前项目中有一个图片服务器,客户端需要直接上传图片到图片服务器中,这就产生了一个跨域post提交文件的问题,很显然jquery本身jsonp只支持get方式的异步提交肯定是不行 其中也尝试过使用ifrmae的方法来提交数据,在网上有,但是效果不理想,并且也很复杂的样子,最后选择出了jquery.from.js 这个插件,可以实现异步的

Jquery ajax提交表单几种方法详解

[导读] 在jquery中ajax提交表单有post与get方式,在使用get方式时我们可以直接使用ajax 序列化表单$( 表单ID) serialize();就行了,下面我来介绍两个提交表单数据的方法.$get方式提交表单get() 方法通过远程 HTTP 在jquery中ajax提交表单有post与get方式,在使用get方式时我们可以直接使用ajax 序列化表单$('#表单ID').serialize();就行了,下面我来介绍两个提交表单数据的方法. $get方式提交表单 get() 方