2014-11-06 5 views
1

Я работаю с struts2, и у меня есть форма, и я хочу получить все значения в массиве JSON.Отсутствие страницы просмотра после вызова ajax во время отправки формы

Чтобы получить этот 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 => result page. Таким образом, результат моих действий является плитка (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?

+0

http://stackoverflow.com/a/1534662/1654265 –

+0

Не было отправлено JSON. –

+0

Потому что это пост Ajax. Все это боковая полоса. Если вы хотите, чтобы что-то произошло после поста Ajax, вам нужно обновить свой JavaScript, чтобы что-то сделать после успешного ответа (или ответа на отказ). –

ответ

0

Хорошо после некоторых тестов ... и с комментариями (спасибо, ребята) я написал решение.

Я до сих пор использовать представление АЯКС в формате JSON, но сообщение обратного вызова является 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; 
} 
} 

URL-адрес, полученный с помощью метода АЯКСА выглядеть следующим образом: пар = значение; значение; значение; & param = value;

Его можно отформатировать по мере необходимости. URL-адрес завершен в javascript (хост и т. Д.).

Каждый параметр URL должен быть свойством действия, вызываемого URL-адресом.

Смежные вопросы