gpt4 book ai didi

java - 表单提交时调用ajax后不显示成功页面

转载 作者:太空宇宙 更新时间:2023-11-04 14:25:01 28 4
gpt4 key购买 nike

我正在使用 struts2,我有一个表单,我想获取 JSON 数组中的所有值。

为了获取此 JSON 数组,我制作了一个 JavaScript 代码片段来将表单转换为 JSON 并在提交事件期间将其发送到 Struts 操作:

<script type="text/javascript">
jQuery("#advanced-search").submit(function(e){
var formInput=jQuery(this).serializeJSON({parseBooleans: true,parseNulls: true});
jQuery.ajax({
type: "POST",
url: "<s:url action='searchJSON'/>",
data: "jsonForm="+JSON.stringify(formInput),
dataType: "json"
});
});
</script>

我的表单操作的实现如下:

<form action="javascript:void(0);" id="advanced-search" method="post">
...
</form>

该操作被调用,我可以使用我的 JSON 数组。下一步是将结果显示到另一个页面,例如搜索 => 结果页面。所以我的操作结果是一个tiles(jsp):

<action name="search" class="searchAction" method="search">     
<result name="success" type="tiles">results</result>
<result name="error" type="tiles">error</result>
</action>

Java代码:

public String search() {
JSONObject jObj = (JSONObject) new JSONTokener(jsonForm).nextValue();
....
return SUCCESS;
}

问题就在这里...我的表单已提交,并且使用良好的JSON数组调用了我的操作,但成功结果没有显示jsp..在浏览器中,页面仍然是表单。

有人知道为什么没有完成到结果页面的重定向吗?

将表单作为 JSON 数组提交是一个好方法吗?

最佳答案

好吧,经过一些测试......并根据评论(谢谢大家)我写了一个解决方案。

我仍然使用JSON格式的ajax提交,但回调消息是重定向的url:

HTML:

<form action="javascript:void(0);" id="advanced-search" method="post">
...
</form>

JS:

jQuery("#advanced-search").submit(function(e){
//var formInput=jQuery(this).serializeObject();
var formInput=jQuery(this).serializeJSON({parseBooleans: true,parseNulls: true});

e.preventDefault();
jQuery.ajax({
url: "<s:url action='searchJSON'/>",
data: "jsonForm="+JSON.stringify(formInput),
contentType: "application/json",
dataType: "json"
}).done(function( msg ) {
window.location.href="<s:url action='search'/>?"+msg;
});
});

然后在ajax调用的方法中,我将JSON对象转换为url:

在 Struts.xml 中:

<action name="searchJSON" class="searchAction" method="searchJSON">
<result type="json">
<param name="root">urlRedirectAjax</param>
</result>
</action>

方法:

public class SearchAction extends ActionSupport {

private String urlRedirectAjax;

public String searchJSON(){

StringBuilder urlResultat = new StringBuilder();
JSONObject jObj = (JSONObject) new JSONTokener(jsonForm).nextValue();

if(jObj == null)
return ERROR;


if(jObj.has("elementJSON")){
JSONObject jsObjMot = (JSONObject) jObj.get("elementJSON");
String separator = "";
for(Object key : jsObjMot.keySet()){
urlResultat.append(separator);
separator = ";";
urlResultat.append((String) key);
}
urlResultat.append("&");
}

.....

urlRedirectAjax = urlResultat.toString();

return SUCCESS;
}

public String getUrlRedirectAjax() {
return urlRedirectAjax;
}

public void setUrlRedirectAjax(String urlRedirectAjax) {
this.urlRedirectAjax = urlRedirectAjax;
}
}

ajax 方法接收到的 url 如下所示:param=value;value;value;&param=value;

可以根据需要对其进行格式化。 url在javascript中完成(主机等)

URL 中的每个参数都必须是该 url 调用的 Action 的属性。

关于java - 表单提交时调用ajax后不显示成功页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26778292/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com