ajax执行完Axtion之后返回404,这是为啥?

思灵月 2013-09-17 05:57:15
遇到这么个诡异的问题,ajax请求去执行Action,java全部执行完毕,需要输出的参数数据都获取到了,success=true,

但是回到浏览器却报这个Action为404,json数据显示,那几个需要的参数都为null,success=false;

怎么出来就变成了null了呢,success也从true变成了false了,求各位指点一下啦!谢谢!


...全文
5368 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
meek_hua 2016-04-19
  • 打赏
  • 举报
回复
在方法上加@ResponseBody注解
In8 2015-01-10
  • 打赏
  • 举报
回复
流程都走完了,返回一个地址是什么意思?
In8 2015-01-10
  • 打赏
  • 举报
回复
我也是一样的问题 !AJAX请求到action,action流程走完了,最后JS爆404, 我的解决方法是action return null; 我的配置方式 <result type="stream"> <param name="msg">msg</param> </result>
思灵月 2013-09-18
  • 打赏
  • 举报
回复
[问题补充] 一直进入erroe ,我alert几个参数如下: alert(XMLHttpRequest.status); alert(XMLHttpRequest.readyState); alert(textStatus); 分别是 404 4 error 为啥?Action都执行完了
思灵月 2013-09-18
  • 打赏
  • 举报
回复
引用 1 楼 yeshanren 的回复:
返回success后跳转页面配置是否正常?自己开一下配置。可以deubg 一下。
因为success=false,出来后也没有进入ajax的success逻辑里面
思灵月 2013-09-18
  • 打赏
  • 举报
回复
引用 2 楼 zhongxianyao 的回复:
配置文件写错了吧,应该是result那里的文件名写错了
我的result这么写的哦
<result name="findKnowledgeResource" type="json">
				<param name="includeProperties">
					knowledgeRes.*,sectionId,success
				</param> 
			</result>
tony4geek 2013-09-18
  • 打赏
  • 举报
回复
引用 16 楼 Bactryki28 的回复:
[quote=引用 14 楼 rui888 的回复:] 改成下面的呢?

$.ajax({
url: basePath + "XXX.action",
data:{treeNodeIdList:treeNodeIdList ,bookId:bookId},
貌似解决了,虽然还是摸不着头脑,但是折腾了一天了,是一个同事写了个hashCode()引起的... 具体的介绍这里有讲http://www.iteye.com/topic/257191[/quote] 不会吧,hashCode 会引起找不到对应的404
思灵月 2013-09-18
  • 打赏
  • 举报
回复
引用 14 楼 rui888 的回复:
改成下面的呢?

$.ajax({
url: basePath + "XXX.action",
data:{treeNodeIdList:treeNodeIdList ,bookId:bookId},
貌似解决了,虽然还是摸不着头脑,但是折腾了一天了,是一个同事写了个hashCode()引起的... 具体的介绍这里有讲http://www.iteye.com/topic/257191
xiaohuashenshou 2013-09-18
  • 打赏
  • 举报
回复
不要给result结果值了,直接return null,本来就是异步加载,还返回result干吗,用printWriter 将页面需要的字符串结果输出给页面就OK了
tony4geek 2013-09-18
  • 打赏
  • 举报
回复
改成下面的呢?

$.ajax({
url: basePath + "XXX.action",
data:{treeNodeIdList:treeNodeIdList ,bookId:bookId},
思灵月 2013-09-18
  • 打赏
  • 举报
回复
引用 12 楼 rui888 的回复:
会不会是数据结构问题呢。 <result type="json"> <param name="root">result</param> </result> private String result; @Override public String execute() throws Exception { result= "{\"id\":1, \"username\":\"zhangsan\", \"pwd\":\"123\"}"; return SUCCESS; }
数据结构是这样的,没错才是啊~这是不带参数去运行url的输出,带了参数就报404,而后台的Action方法是执行完毕的,也就是说knowledgeRes不为null,sectionId不为null,success=true
{"knowledgeRes":null,"sectionId":null,"success":false}
tony4geek 2013-09-18
  • 打赏
  • 举报
回复
会不会是数据结构问题呢。 <result type="json"> <param name="root">result</param> </result> private String result; @Override public String execute() throws Exception { result= "{\"id\":1, \"username\":\"zhangsan\", \"pwd\":\"123\"}"; return SUCCESS; }
  • 打赏
  • 举报
回复
进入error了,那说明还是后台的问题吧?这个ERROR应该是struts2内置的。。。
思灵月 2013-09-18
  • 打赏
  • 举报
回复
引用 9 楼 hjw506848887 的回复:
[quote=引用 8 楼 Bactryki28 的回复:] [quote=引用 7 楼 hjw506848887 的回复:] 如果你用的是ajax,Action中就不能reutrn success了,应该是return null;然后用out.print来传到页面相应的数据啊,所以跟本不可能出现404错误。另外要注意的是,如果用struts2 + ajax,那么当struts2内部的传入的参数解析时出现了问题,那么就会出现异常,而且根本就不会执行Action中的代码,这时后台异常打印的结果就是no result。。。。也就是没有这个Action的result结果,这时候很容易被人误以为自己的后台的action配置错了。。。实际上是struts2自身解析参数出现了问题,比如,你input中是写的数字,而action中对应的参数是日期。。。。。
非常感谢你的回答,我是用struts2 + ajax做的,Action返回一个字符串也就是result名,struts.xml配置如下
<result name="findKnowledgeResource" type="json">
<param name="includeProperties">
knowledgeRes.*,sectionId,success
</param> 
</result>
URL单独执行也是能进入Action获取数据的,但是执行完?Action后还是报404。我断点查过,在getXXX方法中都还是有值的,我不知道是返回过程中哪一个缓解导致的404了~[/quote]这样当然是可以的,用json,完全可以这么写,404错误有一个很直接的问题,就是路径错误。param中的参数确实返回到页面了,你再看一下页面中的接收参数的名字有没有写正确。[/quote] ajax返回就进入error了,没有进入success,跟参数名字没关系吧,你看:

$.ajax({
			   type: "POST",
			   timeout: 10000,
			   dataType:"json",
			   async: true, 
			   url: basePath + "XXX.action?treeNodeIdList="+treeNodeIdList+"&bookId="+bookId,
			   error: function(XMLHttpRequest,textStatus,errorThrown) {
				   alert(XMLHttpRequest.status);
				   alert(XMLHttpRequest.readyState);  
                   alert(textStatus);  
		           $("#showLoading").show();
		       },
			   success: function(msg){
				alert(msg);
				
			   }
		});
  • 打赏
  • 举报
回复
引用 8 楼 Bactryki28 的回复:
[quote=引用 7 楼 hjw506848887 的回复:] 如果你用的是ajax,Action中就不能reutrn success了,应该是return null;然后用out.print来传到页面相应的数据啊,所以跟本不可能出现404错误。另外要注意的是,如果用struts2 + ajax,那么当struts2内部的传入的参数解析时出现了问题,那么就会出现异常,而且根本就不会执行Action中的代码,这时后台异常打印的结果就是no result。。。。也就是没有这个Action的result结果,这时候很容易被人误以为自己的后台的action配置错了。。。实际上是struts2自身解析参数出现了问题,比如,你input中是写的数字,而action中对应的参数是日期。。。。。
非常感谢你的回答,我是用struts2 + ajax做的,Action返回一个字符串也就是result名,struts.xml配置如下
<result name="findKnowledgeResource" type="json">
<param name="includeProperties">
knowledgeRes.*,sectionId,success
</param> 
</result>
URL单独执行也是能进入Action获取数据的,但是执行完?Action后还是报404。我断点查过,在getXXX方法中都还是有值的,我不知道是返回过程中哪一个缓解导致的404了~[/quote]这样当然是可以的,用json,完全可以这么写,404错误有一个很直接的问题,就是路径错误。param中的参数确实返回到页面了,你再看一下页面中的接收参数的名字有没有写正确。
思灵月 2013-09-18
  • 打赏
  • 举报
回复
引用 7 楼 hjw506848887 的回复:
如果你用的是ajax,Action中就不能reutrn success了,应该是return null;然后用out.print来传到页面相应的数据啊,所以跟本不可能出现404错误。另外要注意的是,如果用struts2 + ajax,那么当struts2内部的传入的参数解析时出现了问题,那么就会出现异常,而且根本就不会执行Action中的代码,这时后台异常打印的结果就是no result。。。。也就是没有这个Action的result结果,这时候很容易被人误以为自己的后台的action配置错了。。。实际上是struts2自身解析参数出现了问题,比如,你input中是写的数字,而action中对应的参数是日期。。。。。
非常感谢你的回答,我是用struts2 + ajax做的,Action返回一个字符串也就是result名,struts.xml配置如下
<result name="findKnowledgeResource" type="json">
<param name="includeProperties">
knowledgeRes.*,sectionId,success
</param> 
</result>
URL单独执行也是能进入Action获取数据的,但是执行完?Action后还是报404。我断点查过,在getXXX方法中都还是有值的,我不知道是返回过程中哪一个缓解导致的404了~
  • 打赏
  • 举报
回复
如果你用的是ajax,Action中就不能reutrn success了,应该是return null;然后用out.print来传到页面相应的数据啊,所以跟本不可能出现404错误。另外要注意的是,如果用struts2 + ajax,那么当struts2内部的传入的参数解析时出现了问题,那么就会出现异常,而且根本就不会执行Action中的代码,这时后台异常打印的结果就是no result。。。。也就是没有这个Action的result结果,这时候很容易被人误以为自己的后台的action配置错了。。。实际上是struts2自身解析参数出现了问题,比如,你input中是写的数字,而action中对应的参数是日期。。。。。
异常异长 2013-09-18
  • 打赏
  • 举报
回复
没找到 result的页面吧
编程点滴 2013-09-17
  • 打赏
  • 举报
回复
配置文件写错了吧,应该是result那里的文件名写错了
killerlv 2013-09-17
  • 打赏
  • 举报
回复
返回success后跳转页面配置是否正常?自己开一下配置。可以deubg 一下。

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧