各位大神:
我是一名程序员小菜,目前在使用$.getJSON(url,function(data){})方法时,url地址指定的action不执行,url地址正确。在项目中我用过同样的方法,这个程序是以前写的,一直没问题,最近在做一些测试,这个指定的url中的的action不执行,很是郁闷。
action返回的是一个bean类,不知道是哪里的问题,希望各位大神不吝赐教,小弟拜谢了
url不执行?还是执行了只是没进入function(data)方法?这个要先确定。
采用getJSON到时候,要注意一点,后台返回的data一定要是满足Json格式的字符串,否则的话会json转换错误,进入不了这个方法,进行对应的error方法。
是url不执行,但是url的路径是没有问题的。
@清晨风景:你的url不执行是什么意思?url怎么执行?打开Chrome的开发者工具,查看下这个请求的状态码是多少!然后再后台能够够断点吗?
@幻天芒: 谢谢你的提示,我用火狐工具,状态码是302,这会是什么问题。
@幻天芒:
@清晨风景:302是从缓存中拿数据,没有请求服务器,呵呵。你要加个随机数在url后面。
@幻天芒: 后面加了个"&t="+new Date();是按时间的。
@清晨风景:非常抱歉,记错了。页面缓存状态码是304。
以下是状态码302的解释:请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
新的临时性的 URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。
如果这不是一个 GET 或者 HEAD 请求,那么浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。
从以上内容上看出,实际的请求并没有指向你请求的地址。
@幻天芒: 谢谢您的指导,那我应该如何进行改正,才能将这个请求转换为GET或HEAD请求。
@清晨风景: 检查一下后台的服务器配置吧。
@幻天芒: 好的,这种在什么情况下会出这样的错误,我的配置文件我检查了好多遍,但看不出一点端倪。
@清晨风景: 看下服务器的缓存规则!查看IIS:服务器-网站-{你的网站}-输出缓存
@幻天芒: 谢谢您的耐心指导,我把项目返回到以前的版本,问题没有出现,不过还在查这个问题,谢谢。
@清晨风景: 客气了~
@幻天芒: 您好,我在网络上找到与我问题类似的问题
做验证码功能,系统登录使用的spring-security,先ajax比较验证码,验证码正确后提交用户登录表单。
做ajax比较验证码时碰到ajax 302 Moved Temporarily。
现象:
chrome、firefox、IE下登录均无任何提示,不登录、不跳转,后台验证方法断点不进。
开启浏览器调试工具发现每次请求均返回302。
$.get $.post $.ajax 测试均302
原因:
由于未登录,ajax请求被security拦截,想要跳到login页面,但ajax请求没用控制浏览器url权限,因而发生302。
解决:
security配置文件中配置排除验证码检验方法。
最后的解决方法我不是很理解,希望您不吝赐教
@清晨风景:
我理解的是:系统采用了spring-security,那么每一次请求,都会调用验证用户权限的方法。
当发起验证码的ajax请求时,当前用户还未登录,验证权限时,会产生一个url跳转(如果未登录,那么先登录,所以一般是跳到登录页),这个时候,由于请求是ajax的,ajax处理不了跳转请求,那么就产生了302的一个重定向状态。这个时候,我们需要做的就是让系统在遇到ajax请求验证码的时候,不去验证用户是否登录。所以,对应的去security配置文件中排除验证码方法。
@幻天芒: 很详细,谢谢。
@清晨风景: 您好,请问下,有没有什么工具,能够监视后台对于前台请求的处理方式。比如前台发送一个get请求,后台那个action响应的了前台的请求。
查查路由配置吧
现在我把程序在我本地运行,还是不能访问,路由配置该怎么查,请大神赐教。
@清晨风景: 在 RegisterRoutes 里,看看有没有符合URL的定义
@Yu: 路由器配置我不是很熟悉,希望大神不吝赐教。
@清晨风景: 你把生成的URL 复制到地址栏上,看看能不能访问
@Yu: 不能访问,程序做过过滤,不能直接进行访问。我在getJSON前面用一个form的submit方法,程序可以进去,且后面的getJSON方法就能执行了。可是我把前面的submit方法关掉,重启tomcat,getJSON 方法就进不去了。
你是如何判断Url指定的Action没有执行的,如果是function(data){}没有执行,那么必然是有错误的。有错误就会有错误信息。
如果你用的是Google浏览器,那么F12打开控制台,开打Console选项卡里面会有详细的错误信息。贴出来大家才能帮你想办法。
您好:
我在action类中打了断点,断点工具没有跟踪到action类中,我在function(data){}中用alert命令让其输出内容,也没用内容输出。
用firebug,在错误栏没有信息显示。
@清晨风景
如果你确信Url地址没有问题,那么尝试将$.getJSON换成$.ajax。
$.ajax({ "error":function(msg){ //看这里有没有输出。 console.log(msg); } });
@写代码的小2B: 我在getJSON前面用一个form的submit方法,程序可以进去,且后面的getJSON方法就能执行了。可是我把前面的submit方法关掉,重启tomcat,getJSON 方法就进不去了。
$.ajax({
url: "<%=path%>/instorebill/jsonSellInStore!queryDisInfo.action",
data: "{\"disId\":value,\"seTime\":seTime,\"t\":new Date()}",
async:false,
error:function(err){
console.log(msg);
},
success: function(data){
alert(data);
}
});
没有错误信息
@清晨风景:
@清晨风景: 在firebug中没有错误显示,在All中显示jquery 127,是这行有问题吗
你url这个变量怎么定义的。
url = "<%=path%>/instorebill/jsonSellInStore!queryDisInfo.action?disId="+value+"&seTime="+seTime+"&t="+new Date();
这是我的url设置
@清晨风景: path呢
@aehyok: path 是项目名称,industry
代码贴出来看看
var url = "<%=path%>/instorebill/jsonSellInStore!queryDisInfo.action?disId="+value+"&seTime="+seTime+"&t="+new Date();
$.getJSON(url,function(data){
alert("ok");
}
@清晨风景: jsonSellInStore!queryDisInfo.action? 这中间的!是干嘛的??是不是错了?
@wolfy: 这个是struts调用action方法。
加上一个type="get",试试!
加了,不行,这个问题真是纠结。
@清晨风景: 嗯,别急,晚上很多人都有空的。再等等吧!
@天天爱复制: 好的,谢谢了,希望哪位大神帮我搞定