我需要使用jquery Ajax将表单数据从jsp传递到struts2,并从Struts2操作类接收回JSON数据。我给了下面的代码。当我传递AJAX数据时,
url:'search.action?searchText='+ $('searchValue').value+'&environment='+$('environmentSelect').value
从jsp传递“未定义”而不是原始值到操作类。
我的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>
我的Ajax函数是:
$("#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>
动作类:
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"; } } }
我尚未合并JSON逻辑。触及“未定义”部分。
您需要使用.val()以下功能
.val()
$.ajax({ type: 'POST', url:'search.action?searchText='+ $("#searchValue").val()+'&environment='+$("#environmentSelect").val(), dataType: 'json', success: function(data){ console.log(stringify(data)); }});
另一种方法是
$.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)); }});
希望这可以帮助!