提交表单,但是不跳转页面 用的strus2,我想执行一个action,不过执行完action后,页面不进行跳转,只显示一个提交成功的提示。请教大家这样的效果该怎么实现?用Ajax么?怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以用Ajax实现,也可以把表单提交到一个隐藏的 iframe里,服务器返回给隐藏iframe使其调用js来调用父窗口的js(window.parent.XXXXXX) 你需要的提示是一messageBox的形式显示呢?还是以一个字符串的形式显示在页面上呢? 如果是前者,你需要通过ajax完成。后者的话怎么都行! 除了AJAX,用隐藏的IFRAME或者FRAMESET都可以.不过它们恐怕比AJAX还费事,毕竟AJAX就是专门为了简化这种操作而产生的. 谁能告诉我下用ajax怎么实现?能给点代码么? 感觉用隐藏iframe可以使页面看上去容易理解,就像普通的页面submit表单那样。而且当表单参数非常多的时候,用ajax会写得很郁闷,但Ajax出现的首要原因毕竟是用来实现当前页面内部的服务器访问,用什么方法可以自己衡量。 有两种办法呀,一种提交的时候,把那些内容放在session或者其他地方,刷新页面后再通过DOM把他填进表单另一种就是用ajax咯 //组织策划给你需要的参数codeSQM="codeSQM="+codeSQM+"&checkID="+id+"&checkCODE="+incode; $.ajax({ type:"post", url:"",// action地址 data:codeSQM, //传输的参数,也可以用序列化直接提交表单参数 dataType:"text", error:ajaxErrorReceiverSQM, //异常函数自己定义 success:function(cflag){ })必须要因jquery的包Action中接受参数值不用再说了吧, 成功的提示就在success:function(cflag){ }中书写 如果使用ajax的话估计会更麻烦... 在Action中处理完之后要 给它返回一个参数,可以用PrintWrite out = response.getWrite();out.print(0);//比如返回一个0 表示录入数据库成功,1 录入失败最好Action一定要 return null,在success:function(cflag){ if(cflag==0){ alert(""); } ........} 用jQuery也可以,$.post("xxx.action",{这里是参数,格式"name":myanme,"age":myage......},function(data){ 提交成功后在这里处理 data是Action返回来的值});本人比较喜欢用jQuery 提交表单不跳转要返回值用Ajax定时关闭alert好像不行,可用div模拟 如果不用Ajax的话,提交表单页面肯定是会跳转的,如果想回到原来的页面的话,只能是设置跳转页面为当前页面,然后再把值传回来填充。用Ajax吧,有jQuery、ext这样的开源控件可以很方便实现提交表单。 用JQUERY做吧 挺不错的 例子到网上搜搜就有的是$.post("User/user.action?method=add", { userId:userId, userName:userName }, function(returnedData, status) { if("success" == status) { //alert(returnedData.userId); $('#flag').html("用户(" + returnedData.userName + ")添加成功!"); //增加行 var tbody = $("table tbody"); var newDivCheckbox = $("<div/>"); var newDivId = $("<div/>"); var newTr = $("<tr/>"); var newTdCheckbox = $("<td/>"); var newTdId = $("<td/>"); var newTdUserId = $("<td/>"); var newTdUserName = $("<td/>"); var newTdPassword = $("<td/>"); var newTdOrgId = $("<td/>"); var newTdUserLevel = $("<td/>"); //checkbox var newCheckbox = $("<input type='checkbox' name='checkDelete'/>"); newCheckbox.val(returnedData.userId); newDivCheckbox.append(newCheckbox); var addId = $("table tbody tr:last").children().next().children().html(); addId = parseFloat(addId) + 1; newDivId.append(addId); //赋值 newTdUserId.html(returnedData.userId); newTdUserName.html(returnedData.userName); newTdPassword.html(returnedData.password); newTdOrgId.html(returnedData.orgId); newTdUserLevel.html(returnedData.userLevel); //行增加TD newTdCheckbox.append(newDivCheckbox); newTr.append(newTdCheckbox); newTdId.append(newDivId); newTr.append(newTdId); newTr.append(newTdUserId); newTr.append(newTdUserName); newTr.append(newTdPassword); newTr.append(newTdOrgId); newTr.append(newTdUserLevel); //tbody增加行newTr tbody.append(newTr); //alert(tbody.html()); $.pdialog.closeCurrent(); } else { $('#flag', opener.document).html("添加失败!"); } } ); 貌似不用再传数据吧,应为你的数据在怎么样也是在request里面或者session,就几个标签里面服务器跳转他们应该还在的,你试试跳转到原来页面,页面返回一个数,if(I=1){提交成功}else....。我想应该不需要重新传参数的,你试试看吧 使用Ajax,成功后在页面中弹出一层显示,1秒后消失,使用setTimeout函数就OK了,看看相关文档,你会很快就做出来的 你们说这种方法现实中根本不可行。。首先,我的提交页面是通过一个action得到的,里边有很多选项的内容是通过action实现的,通过跳转到这个页面那不还要跳转到上一个action,就算我把数据传过去,那又如何?如果用chain传递,客户端地址是要改变的,这种页面的客户体验状态不也太差了么?如果用redirectaction来传递,数据是过不来的。就算这种方法能实现,客户的体验状态依旧很糟糕了。。我ajax没学过。。这两天写了个。请大家帮忙看看究竟哪错了。。readystate一直是1.是哪出了问题我把代码贴下。。 <script type="text/javascript"> function sub(i){ var fck = FCKeditorAPI.GetInstance('content'); var content = fck.GetXHTML(true); var title = document.getElementById("title").value; var comment = document.getElementById("comment").value; var reprint = document.getElementById("reprint").value; var publish = document.getElementById("publish"); var preview = document.getElementById("preview"); var formSub = document.getElementById("form1"); if(title.replace(/<(?!img|input|object)[^>]*>|\s+/ig, "") == ""){ alert("请填写标题"); return false; }else if(content.replace(/<(?!img|input|object)[^>]*>|\s+/ig, "") == ""){ alert("请输入内容"); fck.Focus(); return false; } if(i==0){ document.getElementById("title2").innerHTML = "标题:"+title; document.getElementById("state").innerHTML = "转载:"+reprint+" "+"评论:"+comment; document.getElementById("content2").innerHTML = content; publish.style.display="none"; preview.style.display=""; }else if(i==1){ createXMLHttpRequest(); alert("dsf1"); xmlrequest.open("POST","draft_save",false);alert("dsf2"); xmlrequest.onreadystatechange = processResponse;alert("dsf3"); alert(xmlrequest.readyState); }else if(i==2){ formSub.action="article_save"; formSub.submit(); }else { form.action="#"; } } function processResponse(){ alert("dsf"); if(xmlrequest.readyState == 4&&(xmlrequest.status == 200||xmlrequest.status==304)){ alert("sdffds"); } } function reback(){ var publish = document.getElementById("publish"); var preview = document.getElementById("preview"); publish.style.display=""; preview.style.display="none"; } var xmlrequest; function createXMLHttpRequest(){ if(window.XMLHttpRequest){ xmlrequest = new XMLHttpRequest(); } else if(window.ActiveXObject){ try{ xmlrequest = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ xmlrequest = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){} } } } </script> 用jquery可以实现异步提交表单的效果.可以查下这方面的资料,很容易的! 我自己傻逼代码少了个send。才发现。。结贴。想混分的让我怎么说呢? struts2标签及表达式的问题 证书问题 spring管理JDBC事务回滚问题? 做个调查,有多少人了解Tapestry?了解不了解的都进来啊~ Oracle 哪里有hibernate,spring,struts的视频教学下载? 关于使用struts标签库的问题。 oracle 9ias难题,高手来拿分啊! RMI Class Loader disabled问题 FastJSON的parseObject使用模板方法该怎么进行强制转换? tomcat如何初始化自定义类 hibernate 级联问题
你需要的提示是一messageBox的形式显示呢?还是以一个字符串的形式显示在页面上呢?
如果是前者,你需要通过ajax完成。后者的话怎么都行!
另一种就是用ajax咯
codeSQM="codeSQM="+codeSQM+"&checkID="+id+"&checkCODE="+incode;
$.ajax({
type:"post",
url:"",// action地址
data:codeSQM, //传输的参数,也可以用序列化直接提交表单参数
dataType:"text",
error:ajaxErrorReceiverSQM, //异常函数自己定义
success:function(cflag){
})
必须要因jquery的包
Action中接受参数值不用再说了吧,
success:function(cflag){
}中书写
在Action中处理完之后要 给它返回一个参数,可以用
PrintWrite out = response.getWrite();
out.print(0);//比如返回一个0 表示录入数据库成功,1 录入失败
最好Action一定要 return null,在
success:function(cflag){
if(cflag==0){
alert("");
}
........
}
提交成功后在这里处理
data是Action返回来的值
});本人比较喜欢用jQuery
定时关闭alert好像不行,可用div模拟
$.post("User/user.action?method=add",
{ userId:userId,
userName:userName
},
function(returnedData, status) {
if("success" == status) {
//alert(returnedData.userId);
$('#flag').html("用户(" + returnedData.userName + ")添加成功!");
//增加行
var tbody = $("table tbody");
var newDivCheckbox = $("<div/>");
var newDivId = $("<div/>");
var newTr = $("<tr/>");
var newTdCheckbox = $("<td/>");
var newTdId = $("<td/>");
var newTdUserId = $("<td/>");
var newTdUserName = $("<td/>");
var newTdPassword = $("<td/>");
var newTdOrgId = $("<td/>");
var newTdUserLevel = $("<td/>");
//checkbox
var newCheckbox = $("<input type='checkbox' name='checkDelete'/>");
newCheckbox.val(returnedData.userId);
newDivCheckbox.append(newCheckbox);
var addId = $("table tbody tr:last").children().next().children().html();
addId = parseFloat(addId) + 1;
newDivId.append(addId);
//赋值
newTdUserId.html(returnedData.userId);
newTdUserName.html(returnedData.userName);
newTdPassword.html(returnedData.password);
newTdOrgId.html(returnedData.orgId);
newTdUserLevel.html(returnedData.userLevel);
//行增加TD
newTdCheckbox.append(newDivCheckbox);
newTr.append(newTdCheckbox);
newTdId.append(newDivId);
newTr.append(newTdId);
newTr.append(newTdUserId);
newTr.append(newTdUserName);
newTr.append(newTdPassword);
newTr.append(newTdOrgId);
newTr.append(newTdUserLevel);
//tbody增加行newTr
tbody.append(newTr);
//alert(tbody.html());
$.pdialog.closeCurrent();
} else {
$('#flag', opener.document).html("添加失败!");
}
}
);
我ajax没学过。。这两天写了个。请大家帮忙看看究竟哪错了。。readystate一直是1.是哪出了问题我把代码贴下。。
<script type="text/javascript">
function sub(i){
var fck = FCKeditorAPI.GetInstance('content');
var content = fck.GetXHTML(true);
var title = document.getElementById("title").value;
var comment = document.getElementById("comment").value;
var reprint = document.getElementById("reprint").value;
var publish = document.getElementById("publish");
var preview = document.getElementById("preview");
var formSub = document.getElementById("form1");
if(title.replace(/<(?!img|input|object)[^>]*>|\s+/ig, "") == ""){
alert("请填写标题");
return false;
}else if(content.replace(/<(?!img|input|object)[^>]*>|\s+/ig, "") == ""){
alert("请输入内容");
fck.Focus();
return false;
}
if(i==0){
document.getElementById("title2").innerHTML = "标题:"+title;
document.getElementById("state").innerHTML = "转载:"+reprint+" "+"评论:"+comment;
document.getElementById("content2").innerHTML = content;
publish.style.display="none";
preview.style.display="";
}else if(i==1){
createXMLHttpRequest();
alert("dsf1");
xmlrequest.open("POST","draft_save",false);alert("dsf2");
xmlrequest.onreadystatechange = processResponse;alert("dsf3");
alert(xmlrequest.readyState);
}else if(i==2){
formSub.action="article_save";
formSub.submit();
}else {
form.action="#";
}
}
function processResponse(){
alert("dsf");
if(xmlrequest.readyState == 4&&(xmlrequest.status == 200||xmlrequest.status==304)){
alert("sdffds");
}
}
function reback(){
var publish = document.getElementById("publish");
var preview = document.getElementById("preview");
publish.style.display="";
preview.style.display="none";
}
var xmlrequest;
function createXMLHttpRequest(){
if(window.XMLHttpRequest){
xmlrequest = new XMLHttpRequest();
}
else if(window.ActiveXObject){
try{
xmlrequest = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlrequest = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){}
}
}
}
</script>