首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在表单提交过程中调用ajax后没有显示成功页面。

在表单提交过程中调用ajax后没有显示成功页面。
EN

Stack Overflow用户
提问于 2014-11-06 11:25:28
回答 1查看 857关注 0票数 1

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

为了获得这个JSON数组,我创建了一个JavaScript片段来转换JSON中的表单,并在提交事件期间将其发送到Struts操作:

代码语言:javascript
复制
<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>

我的表单操作实现如下:

代码语言:javascript
复制
<form action="javascript:void(0);" id="advanced-search" method="post">
...
</form>

该操作被调用,我可以使用我的JSON数组。下一步是将结果显示到另一个页面,如search =>结果页。因此,我的操作的结果是一个瓷砖(jsp):

代码语言:javascript
复制
<action name="search" class="searchAction" method="search">     
    <result name="success" type="tiles">results</result>
    <result name="error" type="tiles">error</result>
</action>

Java代码:

代码语言:javascript
复制
public String search() {
    JSONObject jObj = (JSONObject) new JSONTokener(jsonForm).nextValue();
    ....
    return SUCCESS;
}

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-14 11:08:39

经过一些测试..。带着这些评论(谢谢各位),我写了一个解决方案。

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

HTML:

代码语言:javascript
复制
<form action="javascript:void(0);" id="advanced-search" method="post">
...
</form>

联署材料:

代码语言:javascript
复制
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调用的方法中,我在url中转换JSON对象:

在Struts.xml中:

代码语言:javascript
复制
<action name="searchJSON" class="searchAction" method="searchJSON">
    <result type="json">
        <param name="root">urlRedirectAjax</param>
    </result>
</action>

方法:

代码语言:javascript
复制
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;¶m=value;

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

url中的每个param必须是URL调用的Action的属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26778292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档