首页 新闻 会员 周边 捐助

$.getJSON(url,function(data){})指定的url地址不执行

0
悬赏园豆:50 [已解决问题] 解决于 2014-01-21 10:56

各位大神:

我是一名程序员小菜,目前在使用$.getJSON(url,function(data){})方法时,url地址指定的action不执行,url地址正确。在项目中我用过同样的方法,这个程序是以前写的,一直没问题,最近在做一些测试,这个指定的url中的的action不执行,很是郁闷。

action返回的是一个bean类,不知道是哪里的问题,希望各位大神不吝赐教,小弟拜谢了

清晨风景的主页 清晨风景 | 初学一级 | 园豆:157
提问于:2014-01-17 15:34
< >
分享
最佳答案
1

url不执行?还是执行了只是没进入function(data)方法?这个要先确定。

采用getJSON到时候,要注意一点,后台返回的data一定要是满足Json格式的字符串,否则的话会json转换错误,进入不了这个方法,进行对应的error方法。

收获园豆:50
幻天芒 | 高人七级 |园豆:37205 | 2014-01-17 23:09

是url不执行,但是url的路径是没有问题的。

清晨风景 | 园豆:157 (初学一级) | 2014-01-18 08:59

@清晨风景:你的url不执行是什么意思?url怎么执行?打开Chrome的开发者工具,查看下这个请求的状态码是多少!然后再后台能够够断点吗?

幻天芒 | 园豆:37205 (高人七级) | 2014-01-18 10:45

@幻天芒: 谢谢你的提示,我用火狐工具,状态码是302,这会是什么问题。

清晨风景 | 园豆:157 (初学一级) | 2014-01-18 14:41

 @幻天芒: 

清晨风景 | 园豆:157 (初学一级) | 2014-01-18 14:46

@清晨风景:302是从缓存中拿数据,没有请求服务器,呵呵。你要加个随机数在url后面。 

幻天芒 | 园豆:37205 (高人七级) | 2014-01-18 18:19

@幻天芒: 后面加了个"&t="+new Date();是按时间的。

清晨风景 | 园豆:157 (初学一级) | 2014-01-18 18:21

@清晨风景:非常抱歉,记错了。页面缓存状态码是304。

以下是状态码302的解释:请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。

  新的临时性的 URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。

  如果这不是一个 GET 或者 HEAD 请求,那么浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。

 

从以上内容上看出,实际的请求并没有指向你请求的地址。

幻天芒 | 园豆:37205 (高人七级) | 2014-01-19 23:28

@幻天芒: 谢谢您的指导,那我应该如何进行改正,才能将这个请求转换为GET或HEAD请求。

清晨风景 | 园豆:157 (初学一级) | 2014-01-20 10:37

@清晨风景: 检查一下后台的服务器配置吧。

幻天芒 | 园豆:37205 (高人七级) | 2014-01-20 12:07

@幻天芒: 好的,这种在什么情况下会出这样的错误,我的配置文件我检查了好多遍,但看不出一点端倪。

清晨风景 | 园豆:157 (初学一级) | 2014-01-20 18:15

@清晨风景: 看下服务器的缓存规则!查看IIS:服务器-网站-{你的网站}-输出缓存

幻天芒 | 园豆:37205 (高人七级) | 2014-01-20 18:49

@幻天芒: 谢谢您的耐心指导,我把项目返回到以前的版本,问题没有出现,不过还在查这个问题,谢谢。

清晨风景 | 园豆:157 (初学一级) | 2014-01-21 10:56

@清晨风景: 客气了~

幻天芒 | 园豆:37205 (高人七级) | 2014-01-21 10:57

@幻天芒: 您好,我在网络上找到与我问题类似的问题

做验证码功能,系统登录使用的spring-security,先ajax比较验证码,验证码正确后提交用户登录表单。

做ajax比较验证码时碰到ajax 302 Moved Temporarily。

现象:

chrome、firefox、IE下登录均无任何提示,不登录、不跳转,后台验证方法断点不进。

开启浏览器调试工具发现每次请求均返回302。

$.get  $.post  $.ajax 测试均302

原因:

由于未登录,ajax请求被security拦截,想要跳到login页面,但ajax请求没用控制浏览器url权限,因而发生302。

解决:

security配置文件中配置排除验证码检验方法。

 

最后的解决方法我不是很理解,希望您不吝赐教

清晨风景 | 园豆:157 (初学一级) | 2014-01-23 12:11

@清晨风景: 

我理解的是:系统采用了spring-security,那么每一次请求,都会调用验证用户权限的方法。
当发起验证码的ajax请求时,当前用户还未登录,验证权限时,会产生一个url跳转(如果未登录,那么先登录,所以一般是跳到登录页),这个时候,由于请求是ajax的,ajax处理不了跳转请求,那么就产生了302的一个重定向状态。这个时候,我们需要做的就是让系统在遇到ajax请求验证码的时候,不去验证用户是否登录。所以,对应的去security配置文件中排除验证码方法。

幻天芒 | 园豆:37205 (高人七级) | 2014-01-23 12:59

@幻天芒: 很详细,谢谢。

清晨风景 | 园豆:157 (初学一级) | 2014-01-23 13:53

@清晨风景: 您好,请问下,有没有什么工具,能够监视后台对于前台请求的处理方式。比如前台发送一个get请求,后台那个action响应的了前台的请求。

清晨风景 | 园豆:157 (初学一级) | 2014-01-24 17:25
其他回答(5)
0

查查路由配置吧

Yu | 园豆:12990 (专家六级) | 2014-01-17 15:36

现在我把程序在我本地运行,还是不能访问,路由配置该怎么查,请大神赐教。

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-17 15:55

@清晨风景: 在 RegisterRoutes 里,看看有没有符合URL的定义

支持(0) 反对(0) Yu | 园豆:12990 (专家六级) | 2014-01-17 16:24

@Yu: 路由器配置我不是很熟悉,希望大神不吝赐教。

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-17 16:28

@清晨风景: 你把生成的URL 复制到地址栏上,看看能不能访问

支持(0) 反对(0) Yu | 园豆:12990 (专家六级) | 2014-01-17 16:33

@Yu: 不能访问,程序做过过滤,不能直接进行访问。我在getJSON前面用一个form的submit方法,程序可以进去,且后面的getJSON方法就能执行了。可是我把前面的submit方法关掉,重启tomcat,getJSON 方法就进不去了。

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-17 16:40
0

你是如何判断Url指定的Action没有执行的,如果是function(data){}没有执行,那么必然是有错误的。有错误就会有错误信息。

如果你用的是Google浏览器,那么F12打开控制台,开打Console选项卡里面会有详细的错误信息。贴出来大家才能帮你想办法。

写代码的小2B | 园豆:4377 (老鸟四级) | 2014-01-17 15:58

您好:

我在action类中打了断点,断点工具没有跟踪到action类中,我在function(data){}中用alert命令让其输出内容,也没用内容输出。

用firebug,在错误栏没有信息显示。

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-17 16:24

@清晨风景

如果你确信Url地址没有问题,那么尝试将$.getJSON换成$.ajax。

$.ajax({
    "error":function(msg){
        //看这里有没有输出。
        console.log(msg);
    }
});
支持(0) 反对(0) 写代码的小2B | 园豆:4377 (老鸟四级) | 2014-01-17 16:31

@写代码的小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);
       }
    });

 

没有错误信息

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-17 16:38

@清晨风景: 

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-17 18:06

@清晨风景: 在firebug中没有错误显示,在All中显示jquery 127,是这行有问题吗

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-17 18:07
0

你url这个变量怎么定义的。

aehyok | 园豆:1212 (小虾三级) | 2014-01-17 16:23

url = "<%=path%>/instorebill/jsonSellInStore!queryDisInfo.action?disId="+value+"&seTime="+seTime+"&t="+new Date();

这是我的url设置

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-17 16:25

@清晨风景: path呢

支持(0) 反对(0) aehyok | 园豆:1212 (小虾三级) | 2014-01-17 16:26

@aehyok: path 是项目名称,industry

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-17 16:27
0

代码贴出来看看

wolfy | 园豆:2636 (老鸟四级) | 2014-01-17 16:24

var url = "<%=path%>/instorebill/jsonSellInStore!queryDisInfo.action?disId="+value+"&seTime="+seTime+"&t="+new Date();

 $.getJSON(url,function(data){

alert("ok");

}

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-17 16:27

@清晨风景: jsonSellInStore!queryDisInfo.action?  这中间的!是干嘛的??是不是错了?

支持(0) 反对(0) wolfy | 园豆:2636 (老鸟四级) | 2014-01-18 20:32

@wolfy: 这个是struts调用action方法。

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-18 21:29
0

加上一个type="get",试试!

大楚打码人 | 园豆:4313 (老鸟四级) | 2014-01-17 17:54

加了,不行,这个问题真是纠结。

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-17 17:58

@清晨风景: 嗯,别急,晚上很多人都有空的。再等等吧!

支持(0) 反对(0) 大楚打码人 | 园豆:4313 (老鸟四级) | 2014-01-17 18:03

@天天爱复制: 好的,谢谢了,希望哪位大神帮我搞定

支持(0) 反对(0) 清晨风景 | 园豆:157 (初学一级) | 2014-01-17 18:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册