`

异步提交表单多个应用

阅读更多

今天,在完成文章留言功能的时候,想实现用户留言信息异步提交,并在最开始的页面显示留言是否成功与否!经过一个上午的思考以及实践,现有两种方法可以实现其功能。
  第一种:利用JQuery的Ajax函数:
function load(){
 var str=$("#replyform").serialize();
$.ajax({
    type: "POST",
    cache: false,
    url:"/On/myblog/Addleftwd.action",
    data:str,
    success: function(msg){
 $("#result").html(msg);
    }
  });
}
第二种:利用JQuery的load()函数:
function load(){
 var str=$("#replyform").serialize();
  alert(str);
  $("#result").load("/On/myblog/Addleftwd.action?"+str);
}
第三种:直接利用Struts 2.1.6中提供的异步提交标签:
又有两种:
<s:url var="l" action="Addleftwd.action" namespace="/myblog"></s:url>
<sx:a  href="%{l}"  formId="replyform" targets="result">
     点击此链接
</sx:a>
此标签放在提交表单外;
<sx:submit id="reply_go" value="提交"  targets="result"></sx:submit>
此标签放在提交表单内部。

在利用Struts中自带的这些异步提交标签时,有事会发现一些属性不会被对应的表单域值所填从,不知道这是不是一个小BUG。
但是在利用前两种方法时,需要将表单域序列化,然后做最参数传递给Action,结果在留言内容部分出现乱码,试着用下面的方式在Action内部解决,还是显示乱码:
public Leftwd leftwd;
  public String addleftwd()
  { Session sess=new BaseHibernateDAO().getSession();
  Transaction tx=null;
  try{tx=sess.beginTransaction();
  byte[] temp =leftwd.getContent().getBytes("UTF-8");
  leftwd.setContent(new String(temp, "GBK"));
  //leftwd.getContent()=new String(getBytes("UTF-8"),"gb2312");
  Timestamp datetime = new Timestamp(new Date().getTime());
  leftwd.setDate(datetime);
  sess.saveOrUpdate(leftwd);
  tx.commit();
  setMessage("发表留言成功!");
  }
  catch(Exception e ){if(tx!=null){tx.rollback();setMessage("抱歉!服务器繁忙!请稍后再试!");}
  }
  finally{sess.close(); return "addleftwd";}

 
  }
希望高人指点一下!谢谢!!
我的文章显示界面:
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<%@ page contentType="text/html; charset=GBK" %>
 <%

 //得到本页的参数内容
 int totals=0,allrecords=1,prePageNo=1,pageNo=0,nextPageNo=1,preOk=1,nextOk=1;
 
      if(request.getParameter("allrecprds")!=null){allrecords = Integer.parseInt(request.getParameter("allrecords").toString());}
   if(request.getParameter("pageno")!=null){pageNo = Integer.parseInt(request.getParameter("pageno").toString());
 
 
   }  prePageNo = pageNo;
 nextPageNo=pageNo;
 if (pageNo==0) nextOk=0;
 if (pageNo*3>allrecords) preOk=0;
 
 //计算上一页和下一页的页码及按钮的状态

%>
<html>
<head>
<sx:head debug="true" extraLocales="en-us,nl-nl,de-de"/>
<script type="text/javascript" src="/On/JS/jquery-1[1].3.2.js"></script>
<script type="text/javascript" src="/On/JS/nav.js"></script>
<s:include value="/all.jsp"></s:include>
<script type="text/javascript" src="/On/tinymce/jscripts/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript">
 tinyMCE.init({
  mode : "textareas",
  theme : "simple"
   
 });


function load(){
 var str=$("#replyform").serialize();
$.ajax({
    type: "POST",
    cache: false,
    url:"/On/myblog/Addleftwd.action",
    data:str,
    success: function(msg){
 $("#result").html(msg);
    }
  });
}
 
</script>


<title>无标题文档</title>
<style>
body{
font-family:Arial, Helvetica, sans-serif;
font-size:14px;

}
#topicdetail_content{
border:1px solid #996633;
margin-left:10%;
width:90%;
}
#content{
float:right;
width:80%;
border:1px solid #996633;
height:800px;
margin-top:0px;
}
#header{
float:left;
line-height:14px;
font-family:Arial, Helvetica, sans-serif;
font-size:20px;
color:#FFCC33;
margin-left:0px;
width:100%;
height:30px;
background:url(/On/jpg/nav.gif) repeat;
}
#header #headerul{
margin-top:1px;
margin-bottom:1px;
margin-left:0px;
list-style:none;
}
#header #headerul li{
text-align:center;
padding:5px 5px 5px 5px;
border: 1px solid #ffffff;

display: block;
float:left;
}
#header #author{
width:20%;

}
#picture{
width:100%;
height:300px;
}
#header #topic{
width:80%;

}
#authorinfo{
margin-left:0px;
list-style:none;
}
#authorinfo #authorinfoul{
margin-left:0px;}
#authorinfoul li{
margin-left:0px;
}
#leftbar{
border:1px solid #996633;
margin-left:0px;
width:20%;
float:left;
}
#elm{
font-family:Arial, Helvetica, sans-serif;

}
#leftwd_content{
float:right;
width:80%;
border:1px solid #996633;
margin-top:0px;
}

 

#leftwd_leftbar{
border:1px solid #996633;
margin-left:0px;
width:15%;
float:left;
height:250px;
}
#authorinfo{
margin-left:0px;
list-style:none;
}
#authorinfo #authorinfoul{
margin-left:0px;}
#authorinfoul li{
margin-left:0px;
}

#rightbar{
float:left;
height:250px;
width:80%;
}
#firstbar{
border:1px solid #FFFFFF;
width:100%;
height:10%;}
#leftword{
width:100%;
height:100%;
}
#lastbar{
border:1px solid #FFFFFF;

width:100%;
height:10%;
margin-bottom:0px;}
#changepage{
float:right;
width:80%;
border:1px solid #FFCCFF;
margin-top:0px;
}
#reply{
float:right;
width:80%;
border:1px solid #996633;
margin-top:0px;
}
#reply_go{
width:50px;
height:20px;
display:block;
border:1px solid #FFCCFF;
}
#changepage a{
background:#3366CC;
float:right;
width:60px;
display:block;
color:#FFFFFF;

 

}
</style>
</head>

<body>
<div id="topicdetail_content">
 <div id="header">
  <ul id="headerul">
  <li id="author">作者</li>
  <li id="topic">正文</li>
  </ul>
  </div><!--end header-->
<div id="leftbar">
<div id="authorinfo">
  <ul id="authorinfoul">
  <li id="photo"><a href="/On/myblog/showblog.action?mem=${member.id}"><img src="${member.picture}" id="picture"/></a></li>
   <li>姓名:<s:property value="member.name"/></li>
  <li>浏览次数:<s:property value="member.blogtimes"/> </li>
  <li>积分:<s:property value="member.money"/></li>
 <li>来自于:<s:property value="member.adress"/></li>
 <li>是否在线</li>
 <li>我要给他发送信息</li>
  </ul>
</div>
</div><!--end leftbar-->
<div id="content">
<H1 align="center">
<s:property value="topicblog.name"/></H1>
 <h4 align="center"><s:property value="topicblog.data"/><s:property value="topicblog.times"/><br></h4>

 <s:textarea readonly="true"  id="elm" name="elm1" value="%{topicblog.content}" rows="42" cols="70" style="width:100%"/>
 </div>
<!--留言显示-->
<s:iterator value="leftwdinfo">
<div id="leftwd_content">

<div id="leftwd_leftbar">
<div id="authorinfo">
  <ul id="authorinfoul">
    <li>姓名:<s:property value="name"/></li>
  <li id="photo"><img src="${picture}" width="160" height="170" /></img></li>
 <li>博客文章:<s:property value="topicnum"/></li>
  <li>积分:<s:property value="money"/></li>
 <li>来自于:<s:property value="adress"/></li>
 <li>是否在线</li>
 <li>我要给他发送信息</li>
  </ul>
</div>
</div><!--end leftbar-->
<div id="rightbar">
<div id="firstbar">
<strong>发表时间:<s:property value="date"/></strong>
</div>
<div id="leftword"><s:property value="content"/></div>
<div id="lastbar"></div>
</div>
</div><!--end leftwd_content-->
</s:iterator> 
<div id="changepage">
总共<s:property value="%{attr.allrecords}"/>留言
<a href="showtopicdetail.action?id=${topicblog.id}&mem=${topicblog.memberId}&pageno=${request.pageno}&up=false ">上一页</a>
<a href="showtopicdetail.action?id=${topicblog.id}&mem=${topicblog.memberId}&pageno=${request.pageno}&up=true ">下一页</a>
</div>
<!-- 留言板块 -->
<div id="reply">
<strong>发表评论</strong><hr />
<div id="result">
</div>
<div id="reply_content">
<s:if test="%{#session.member!=null}">
<s:form id="replyform" method="post" theme="xhtml">
<s:hidden value="%{topicblog.id}" name="leftwd.topicBlogId"></s:hidden>
<s:text name="%{topicblog.id}"></s:text>
<s:hidden value="%{session.member.id}" name="leftwd.id"></s:hidden>
<s:textarea  id="elm"  name="leftwd.content" rows="6" cols="8" style="width:100%"/>
<a href="javascript:load()"><img src="/On/jpg/download.gif"/></a>
<sx:submit id="reply_go" value="提交"  targets="result"></sx:submit>
</s:form>
 <s:url var="l" action="Addleftwd.action" namespace="/myblog"></s:url>
<sx:a  href="%{l}"  formId="replyform" targets="result">
     点击此链接
</sx:a>

</s:if>
<s:else>
请先<a href="/On/login.jsp">登录</a>或<a href="/On/register.jsp">注册</a>后才能留言!
</s:else>

</div>
</div>
</div>
</body>
</html>


 

3
1
分享到:
评论
1 楼 itaxi 2012-11-14  
多谢, 一个serialize() 拯救了我

相关推荐

    Ajax异步提交表单数据的说明及方法实例

    类似这样的问题很多很多。异步获取数据使用户体验大大增强。背景知识:Ajax指的是异步JavaScript及XML(Asynchronous JavaScript And XML)。AJAX 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的...

    表单的验证

     简单的 Ajax 表单提交 基于XML的异步JavaScript,简称AJAX,是当前Web创新(称为Web2.0)中的一个王冠。感谢组成AJAX的各种技术,Web应用的交互如Flickr, Backpack和Google在这方面已经有质的飞跃。这个术语源自...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.4.2 将实体映射到多个表 394 10.4.3 映射复合类型的属性 396 10.4.4 映射实体类的主键 398 10.5 关联关系映射 402 10.5.1 单向N-1关联 403 10.5.2 单向1-1关联 406 10.5.3 单向1-N关联 409 10.5.4 单向N-N...

    精通AngularJS part1

    直接向服务器提交表单161 处理表单提交事件161 使用ngSubmit处理表单提交162 使用ngClick处理表单提交162 59重置用户信息表单162 510摘要164 第6章导航165 61单页Web应用的URL166 HTML5之前的HashbangURL166...

    shrine-rails-example:使用Shrine gem的示例应用程序

    用户选择一个或多个文件 将文件异步异步直接上传到S3,并显示进度条 缓存的文件数据被写入隐藏字段 提交表单后,将启动后台作业以处理图像 记录与高速缓存的文件一起保存,显示为后备 后台作业完成后,将使用已处理...

    API之网络函数---整理网络函数及功能

    GetCharABCWidthsFloat 查询一种字体中一个或多个字符的A-B-C尺寸 GetCharacterPlacement 该函数用于了解如何用一个给定的字符显示一个字串 GetCharWidth 调查字体中一个或多个字符的宽度 GetFontData 接收一种可...

    Dcat Admin后台构建工具 v1.7.4

    数据表单构建工具,内置丰富的表单类型,支持表单异步提交 分步表单构建工具 弹窗表单构建工具 数据详情页构建工具 无限层级树页面构建工具,支持用拖拽的方式实现数据的层级、排序等操作 内置丰富的常用页面...

    大名鼎鼎的IBM公司 Ajax 培训资料

    以迅速更新表单数据,让人感觉应用程序是立即完成的,表单没有提交或刷新而用户得到了新数据。 JavaScript 代码甚至可以对收到的数据执行某种计算,再发送另一个请求,完全不需要用户干预!这就 是 XMLHttpRequest ...

    超实用的jQuery代码段

    8.10 使用AJAX刷新异步提交表单 8.11 使用AJAX刷新上传图片 8.12 使用AJAX刷新验证PHP会话是否有效 8.13 在AJAX异步调用时显示加载指示器 8.14 在AJAX异步调用时处理JSON数据 8.15 解析XML数据并加载到HTML表格 8.16...

    The Flask Mega-Tutorial

    更多有趣的信息 编辑用户信息 结束语 单元测试 回顾 发现 bug Flask 调试 定制 HTTP 错误处理器 通过电子邮件发送错误 记录到文件 修复 bug 单元测试框架 结束语 关注者,联系人和好友 回顾 ‘关注者...

    sample-autopilot-voice-ivr:具有自动驾驶仪的语音驱动IVR聊天机器人

    Autopilot是一个对话式AI平台,用于构建,训练和部署可以通过多个渠道与用户交互的人工智能应用程序。 其他语言的实现: 。网 Java Python PHP Ruby 待定 待定 待定 待定 待定 这个怎么运作 这是一个非常简单的...

    Grails 中文参考手册

    6.7.1.3 异步表单提交 6.7.1.4 Ajax事件 6.7.2 用Dojo实现Ajax 6.7.3 用GWT实现Ajax 6.7.4 服务端的Ajax 6.8 内容协商 7. 验证 7.1 声明约束 7.2 验证约束 7.3 客户端验证 7.4 验证和国际化 8. 服务层 8.1 声明式...

    Dcat Admin后台构建工具-PHP

    数据表单构建工具,内置丰富的表单类型,支持表单异步提交 分步表单构建工具 弹窗表单构建工具 数据详情页构建工具 无限层级树页面构建工具,支持用拖拽的方式实现数据的层级、排序等操作 内置丰富的常用页面组件...

    NTKO文档在线编辑控件4.0.1.2

    10 支持在提交编辑文档的同时,提交表单的其它数据,包括其它的文件上传 采用我们独创的“智能提交”技术,让您在提交编辑文档的同时,提交表单的其它数据,以及表单中其它的文件上传。这可以让您更加快速的集成现有...

    【卷一/共两卷】AJAX实战pdf高清版90M

    10.4 添加功能:包含不同查询的多个元素 10.5 重构 10.5.1 第一天:开发TextSuggest组件的游戏计划 10.5.2 第2天:创建TextSuggest ——清晰而且可配置 10.5.3 第3天:支持Aiax 10.5.4 第4天:事件处理 10.5.5 第5天...

    ASP.NET MVC 3高级编程

    9.2.6 段中的多个url参数 221 9.2.7 stoproutinghandler和ignoreroute 222 9.2.8 路由的调试 223 9.2.9 揭秘路由如何生成url 224 9.3 揭秘路由如何绑定到操作 230 9.3.1 高层次请求的路由管道 230 9.3.2 路由...

    asp.net知识库

    ADO.NET 2.0 大批量数据操作和多个动态的结果集 ADO.NET 2.0 异步处理 在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+...

    C#编程经验技巧宝典

    24 &lt;br&gt;0050 using关键字的用法 24 &lt;br&gt;0051 变量的作用域 25 &lt;br&gt;2.5 其他 26 &lt;br&gt;0052 有效使用this对象 26 &lt;br&gt;0053 如何声明变量 26 &lt;br&gt;0054 如何声明相同类型的多个变量 26 ...

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    5.4.htm 一个用else进行更多选择的例子 5.5.htm 一个if语句嵌套的例子 5.6.htm 嵌套语句的另一种应用 5.7.htm 一个switch语句的应用 5.8.htm 利用while循环显示了一个6行的...

Global site tag (gtag.js) - Google Analytics