ajax请求action,action无法获取值

anyuqi 2015-11-13 07:14:17
想实现类似于京东分类筛选的,如图所示


打算用三个隐藏的input获取点击的标签的值,但是传到action的时候,无法获取到值T^T,typeid、categoryid均为0,即使在input中设置初始的value也没有用,求救
代码比较粗糙,逻辑性也不是很强,因为是新手,还请不要介意

页面代码

<form id="ajaxForm" method="get">
<input id="typeid" type="text" value=0 />
<input id="categoryid" type="text" value=2 />
<input id="language" type="text" value=""/>
</form>
<ul class="select">
<li class="select-list">
<dl id="select1">
<dt>成果类型:</dt>
<dd class="select-all selected"><a href="javascript:Filter('typeid','0')" >全部</a></dd>
<s:iterator value="listType" id="row">
<dd>
<a href="javascript:Filter('typeid','<s:property value="#row.typeid"/>')" ><s:property value="#row.typename"/></a>
</dd>
</s:iterator>
</dl>
</li>
<li class="select-list">
<dl id="select2">
<dt>所属学科:</dt>
<dd class="select-all selected"><a href="javascript:Filter('categoryid','0')" >全部</a></dd>
<s:iterator value="listCate" id="row">
<dd>
<a href="javascript:Filter('categoryid','<s:property value="#row.categoryid"/>')"><s:property value="#row.categoryname" /></a>
</dd>
</s:iterator>
</dl>
</li>
<li class="select-list">
<dl id="select3">
<dt>语言:</dt>
<dd class="select-all selected"><a href="javascript:Filter('language','')">全部</a></dd>
<dd><a href="javascript:Filter('language','中文')" >中文</a> </dd>
<dd><a href="javascript:Filter('language','English')">English</a> </dd>
</dl>
</li>
<li class="select-result">
<dl>
<dt>已选条件:</dt>
<dd class="select-no">暂时没有选择过滤条件</dd>
</dl>
</li>
</ul>
</div>


js代码

function Filter(id, value){
document.getElementById(id).value = value;
// document.forms['ajaxForm'].submit();
toPage(1);
return false;
}
//分页
function toPage(index){
$.ajax({
url :"sList.action?pager.pageIndex"+index, //后台处理程序
data:{//设置数据源
typeid:$("input[name=typeid]").val(),
categoryid:$("input[name=categoryid]").val(),
language:$("input[name=language]").val()
},

type:"post", //数据发送方式
async:false,
dataType:"json", //接受数据格式
error: function(){
alert("服务器没有返回数据,可能服务器忙,请重试");
},

success: function(){
// var listArray = eval(json).titlelist;

$("#searchResult").html(data);
}
});
}


action代码

package com.action;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import com.opensymphony.xwork2.ActionSupport;
import com.orm.Pager;
import com.service.ILiteratureService;

public class temp extends ActionSupport {

private int typeid;
private int categoryid;
private String language;
private Pager pager;

@Resource(name="literatureService")
private ILiteratureService litService;

private static final long serialVersionUID = 1L;

private HttpServletRequest request;
private String result;

public void setServletRequest(HttpServletRequest arg0) {
this.request = arg0;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}

public String execute() throws Exception {
try{
int tid = Integer.parseInt(request.getParameter("typeid"));
int cid = Integer.parseInt(request.getParameter("categoryid"));
//String language = l.getLanguage();
String lg = request.getParameter("language");
pager = litService.search(pager.getPageIndex(), 5, tid, cid, lg);
return "searchSUCCESS";
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
}

public int getTypeid() {
return typeid;
}
public void setTypeid(int typeid) {
this.typeid = typeid;
}
public int getCategoryid() {
return categoryid;
}
public void setCategoryid(int categoryid) {
this.categoryid = categoryid;
}

public Pager getPager() {
return pager;
}
public void setPager(Pager pager) {
this.pager = pager;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
}
...全文
154 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
我傻x 2015-11-17
1,首先当然是id的问题了,
  <input id="typeid" type="text" value=0 />
      <input id="categoryid" type="text" value=2 />
      <input id="language" type="text" value=""/>
jsp中定义的id属性,当然要用id获取了
 var typeId = $("#typeid").val();
      var categoryId=$("#categoryid").val();
      var language=$("#language").val();
2,后台用struts2,那就在jquery中拼json格式时要给key加上引号。
   data:{//设置数据源
                               “typeid”:$("input[name=typeid]").val(),
                               “categoryid”:$("input[name=categoryid]").val(),
                               “ language”:$("input[name=language]").val()
                        },
3,最后在struts的action中定义typeid,categoryid和language三个变量,并给其设置get和set方法,你就无需用getParameter方法获取变量值了,struts会帮你赋值的。你只需要保证三个变量名和jquery传过来json格式数据中三个key相同并且具有get和set方法即可。最后你只需在需要的方法中调用变量使用。
回复
梁志伟2 2015-11-17
copy的。
回复
javaliu1 2015-11-17
:$("input[name=categoryid]").val() alert看下有没有值
回复
sinat_31535993 2015-11-16
没有设置name属性,却去取name值,你怎么可能会取到?
回复
钉子4lmy 2015-11-16
你需要给你的标签一个name属性!!!
回复
typeid:$("input[name=typeid]").val(), categoryid:$("input[name=categoryid]").val(), language:$("input[name=language]").val() js里面:你这个获取是获取input name为 typeid 的 可是你页面里面input ,却是id为 typeid,这怎么能获取到? 修改: typeid:$("#typeid").val(), categoryid:$("#categoryid").val(), language:$("#language").val()
回复
那就说明你的request.getParameter("typeid") 还是为null, null你进行类型转换肯定有问题的 至于没获取到的原因:可能是你js没赋值成功,也可能是没取到。 解决方案:

var typeId = $("#typeid").val();
var categoryId=$("#categoryid").val();
var language=$("#language").val();
z这三个值分别用变量储存,然后用chrom的审查元素,设个断点调控,看看有没有获取到值,然后你就可以清楚知道问题在哪了
回复
anyuqi 2015-11-14
引用 2 楼 shijing266 的回复:
typeid:$("input[name=typeid]").val(), categoryid:$("input[name=categoryid]").val(), language:$("input[name=language]").val() js里面:你这个获取是获取input name为 typeid 的 可是你页面里面input ,却是id为 typeid,这怎么能获取到? 修改: typeid:$("#typeid").val(), categoryid:$("#categoryid").val(), language:$("#language").val()
修改了之后,执行int tid = Integer.parseInt(request.getParameter("typeid")); 这一句,就直接跳到catch中了
回复
anyuqi 2015-11-14
修改了之后,执行int tid = Integer.parseInt(request.getParameter("typeid")); 这一句,就直接跳到catch中了
回复
abelardx 2015-11-13
js获取的时候$('#输入ID').val获取再传值。不行的话再试试set方法去掉再试试。还有server方法get set试试。仅供参考
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-11-13 07:14
社区公告
暂无公告