1 $(".sortCondition").click(function(){ 2 var condition=$(this).text(); 3 alert(condition); 4 $.ajax( 5 { 6 url:'findProject.action', 7 type:'post', 8 data:condition,//传递的参数 9 dataType:"JSON", 10 success:function(data){ 11 alert(data); 12 var backdata=JSON.parse(data); 13 for(var i=0;i<backdata.length;i++){ 14 $(".content").append("<li title=‘’>${backdata[i].projector.projector_name}</li>"); 15 $(".content").append("<li title=‘’>${backdata[i].project_name}</li>"); 16 $(".content").append("<li title=‘’>${backdata[i].project_explain}</li>"); 17 } 18 }, 19 error:function(){ 20 alert("出错了"); 21 } 22 } 23 ); 24 });
元素$(".sortCondition")被点击后,向findProject.action请求,并把返回数据填充到 $(".content")里面,
<div> <ul class="content"> </ul> </div>
我的action写法:
1 public class ProjectAction extends ActionSupport{ 2 3 private static final long serialVersionUID = 1L; 4 5 private ProjectService projectService = null; 6 private Project project = null; 7 private Projector projector = null; 8 private ProjectorService projectorService = null; 9 private String condition; //前端传的条件参数 10 private String backData;//返回参数 11 12 public String find() { 13 System.out.println(condition); 14 List<Project> list = null; 15 if(condition.equals("时间排序")){ 16 list = projectService.orderByTime(); 17 } 18 JSONObject json=JSONObject.fromObject(list); 19 setBackData(json.toString()); 20 return SUCCESS; 21 } 22 public ProjectService getProjectService() { 23 return projectService; 24 } 25 public void setProjectService(ProjectService projectService) { 26 this.projectService = projectService; 27 } 28 public Project getProject() { 29 return project; 30 } 31 public void setProject(Project project) { 32 this.project = project; 33 } 34 public Projector getProjector() { 35 return projector; 36 } 37 public void setProjector(Projector projector) { 38 this.projector = projector; 39 } 40 public ProjectorService getProjectorService() { 41 return projectorService; 42 } 43 public void setProjectorService(ProjectorService projectorService) { 44 this.projectorService = projectorService; 45 } 46 public String getCondition() { 47 return condition; 48 } 49 public void setCondition(String condition) { 50 this.condition = condition; 51 } 52 public String getBackData() { 53 return backData; 54 } 55 public void setBackData(String backData) { 56 this.backData = backData; 57 }
struts.xml配置:
1 <package name="project" extends="json-default"> 2 3 <action name="*Project" class="cn.ncu.et.action.ProjectAction" method="{1}"> 4 <result name="success" type="json"> 5 <param name="root">backData</param> 6 </result> 7 </action> 8 9 </package>
刚刚学的,有很多东西不是很清楚,希望大神解答,多谢多谢
查看web.xml里面,有没有设置拦截.action的请求
<filter> <!-- 配置Struts2核心控制器的名字 --> <filter-name>struts2</filter-name> <!-- 配置Struts2核心控制器的实现类 --> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- 配置Struts2拦截的URL --> <filter-mapping> <!-- 配置Struts2拦截器的名字 --> <filter-name>struts2</filter-name> <!-- 配置Struts2的核心FilterDispatcher拦截所有请求 --> <url-pattern>/*</url-pattern> 或者<url-pattern>/*.action</url-pattern> </filter-mapping>
<action name="*Project"
ajax 里的url是findProject.action
你还是把他们的名字设成一样: findProject
如果都正确的话。你可以在error: function()里打印错误的状态码
error: function (XMLHttpRequest, textStatus, errorThrown) { // 状态码 console.log(XMLHttpRequest.status); // 状态 console.log(XMLHttpRequest.readyState); // 错误信息 console.log(textStatus); }
查看是什么错误。
<package name="project" extends="json-default"> <action name="findProject" class="cn.ncu.et.action.ProjectAction"method="find"> <result name="success" type="json"> <param name="root">backData</param> </result> </action> </package>
改成这样的了,web.xml上面配置了拦截为/*
<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
还是不行,我后端获取condition属性,然后像下面这样处理
public String find() { System.out.println(condition); List<Project> list = null; if(condition.equals("时间排序")){ list = projectService.orderByTime(); } JSONObject json=JSONObject.fromObject(list); setBackData(json.toString()); return SUCCESS; }
前端像下面这样操作list
success:function(data){ alert(data); var backdata=JSON.parse(data); for(var i=0;i<backdata.length;i++){ $(".content").append("<li title=‘’>${backdata[i].projector.projector_name}</li>"); $(".content").append("<li title=‘’>${backdata[i].project_name}</li>"); $(".content").append("<li title=‘’>${backdata[i].project_explain}</li>"); } },
这些有问题吗,我觉得可能是我数据转换的过程中哪里写的有问题,
你好,我调试了一下,后台获取不到前台传的的condition属性
url:'findProject.action', type:'post', data:"condition"+condition, dataType:"JSON",
ajax的data加了一个name,后台改成这样的
public String find() { setCondition(ServletActionContext.getRequest().getParameter("condition")); System.out.println(condition);
打印condition结果仍未null
@可爱的丶男孩子: 你确定请求可以到达find()函数里吗?你Debug一下,在find函数里设置断点,看看请求能否走到find函数里。
@Shendu.cc: 现在可以获取到condition属性的值了,但是报了一个奇怪的错误
点进去是这样的
xhr.send( ( s.hasContent && s.data ) || null );这行报错,换了一个jquery版本也会报错
@可爱的丶男孩子: 500是后台服务端的错误,应该是你的action有错误。还是建议Debug,一步步走下去,看能否顺利走完。
error:function(data){}这里面也有返回数据的的吧?有可能是后台出错了?
调试了一下,没有获取到前台传的condition属性,我改了一下data,加了一个name,
url:'findProject.action', type:'post', data:"condition"+condition, dataType:"JSON",
后台这样写的
public String find() { setCondition(ServletActionContext.getRequest().getParameter("condition")); System.out.println(condition);
打印出来的condition仍为null。。
@可爱的丶男孩子: data: { val1: "1", val2: "2" }, //要发送的数据(参数)格式为{'val1':"1","val2":"2"}
参数要是这样的格式的吧
你的问题是什么?
– Shendu.cc 6年前@Shendu.cc: 访问不到action,find方法没执行,直接执行的
– 可爱的丶男孩子 6年前error:function(){
alert("出错了");
}方法
@Shendu.cc: 我觉得我action返回json数据到前端应该也有问题,我有点菜,不知道哪里有问题
– 可爱的丶男孩子 6年前