在表单提交期间调用ajax后没有显示成功页面

时间:2014-11-06 11:25:29

标签: java jquery ajax json struts2

我正在使用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数组。下一步是将结果显示到另一个页面,例如search =&gt;结果页面。所以我的动作结果是一个tile(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数组提交是一种好方法吗?

1 个答案:

答案 0 :(得分:0)

好的经过一些测试......并且评论(谢谢你们)我写了一个解决方案。

我仍然使用带有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调用的方法中,我在一个url:

中转换JSON对象

在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方法收到的网址如下: param = value; value; value;&amp; param = value;

可以根据需要对其进行格式化。网址在javascript(主机等)

中完成

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