I need to pass the form data from jsp to struts2 using jquery Ajax and receive back a JSON data from Struts2 action class. I have given the code below. When i am passing the AJAX data ,
url:'search.action?searchText='+ $('searchValue').value+'&environment='+$('environmentSelect').value
“undefined” is getting passed instead of the orijinal value from jsp to the action class.
My JSP
<div id="tab0"> <s:form action="search" method="post"> <table style="margin-left: auto; margin-right: auto"> <tr> <td>Environment:</td> <td><select id="environmentSelect" name="environment"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select></td> </tr> <tr> <td>Search Value:</td> <td><input id="searchValue" name="searchText" type="text" /></td> </tr> <tr> <td></td> <td><button id="searchButton">Search</button></td> </tr> </table> </s:form> </div>
My Ajax function is:
$("#searchButton").on("click",function(){ console.log("Inside Ajax call = "+ $('#tab0')); $.ajax({ type: 'POST', url:'search.action?searchText='+ $('searchValue').value+'&environment='+$('environmentSelect').value, dataType: 'json', success: function(data){ console.log(stringify(data)); s=data.... } document.getElementById('displayLog').innerHTML=s; }); return false; });
Struts.xml:
<struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <constant name="struts.custom.i18n.resources" value="ApplicationResources" /> <constant name="struts.convention.default.parent.package" value="default"/> <constant name="struts.ui.theme" value="simple" /> <package name="default" extends="struts-default" namespace="/"> <action name="search" class="com.SearchAction" method="execute"> <result name="success">/jsp/dummy.jsp</result> <result name="error">/jsp/search.jsp</result> </action> </package> </struts>
Action Class:
public class SearchAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private String environment; private String searchText; public String getEnvironment() { return environment; } public void setEnvironment(String environment) { System.out.println("environment in setter new = "+ environment); this.environment = environment; } public String getSearchText() { return searchText; } public void setSearchText(String searchText) { System.out.println("searchText in setter = "+ searchText); this.searchText = searchText; } public String execute() { Map map1 = new Map(); if(environment !=null && searchText != null){ map1= getMap(environment,searchText); return success; } else{ return "error"; } } }
I did not incorporate the JSON logic yet. Struck with the “undefined” part.
Answer
You need to use .val()
function as below
$.ajax({ type: 'POST', url:'search.action?searchText='+ $("#searchValue").val()+'&environment='+$("#environmentSelect").val(), dataType: 'json', success: function(data){ console.log(stringify(data)); }});
The other way is to
$.ajax({ type: 'POST', url:'search.action?searchText='+ document.getElementById('searchValue').value +'&environment='+document.getElementById('environmentSelect').value, dataType: 'json', success: function(data){ console.log(stringify(data)); }});
Hope this helps!