求懂jquery和动态action的人:jquery的ajax动态action传不了action中的方法名啊

$(document).ready(function(){
$("button").click(function(){
$.post("news.html?ms=lxy",function(result){
alert(result);
alert(result.users[0].name);
});
});
});
第一个alert是
{"users":[{"name":"chuanguolaile"}]}
第二次就出错了..说是这个users是空
Error: Unable to get value of the property '0': object is null or undefined
java:
PrintWriter out = response.getWriter();
String ms=request.getParameter("ms");
if("lxy"==ms)
{
out.println("{\"users\":[{\"name\":\"chuanguolaile\"}]}");
return null;
}
else
{
out.println("{\"users\":[{\"name\":\"meiyouchuanguolai\"}]}");
return null;
}
这个方法是默认的方法,把js改成
$(document).ready(function(){
$("button").click(function(){
$.post("news.html?para=getName",function(result){
alert(result);
alert(result.users[0].name);
});
});
});
这样就不行了
public ActionForward getName(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
PrintWriter out = response.getWriter();
out.println("{\"users\":[{\"name\":\"lxy\"}]}");
out.flush();
out.close();
return null;
}
这样传过来getName但是不知道里面怎么传的它不认识...所以还是用的上面的函数
其实呢,两个问题现在都解决了
第一个问题嘛,不知道,反正代码还是以前的,但是可以用了,也许就是下面哥们说的,是json的缓存问题吧
第二个,是因为第一个已经有了execute了,所以actionservlet比较笨,就直接把所有的都转到那个方法,只要删除了execute就可以了,不过这样第一个就不能用了
最新回答
枕头说它不想醒

2024-08-02 02:31:21

我晕。当然会出错啊。因为你返回来的值是字符串,并不是一个对象。
$.post("news.html?ms=lxy",function(result){
var temp =eval(result);
alert(temp);
alert(temp.users[0].name);
});
你这样试试
追问
$(document).ready(function(){
$("button").click(function(){
$.post("news.html?ms=lxy",function(result){
var temp=eval(result);
alert(temp);
alert(temp.users[0].name);
});
});
});是这样吧?我刚才把post改成getJSON可以了,但是之前改成get或者getJSON也不行,而且现在你这样也不行...而且,jquery是自动识别这些的...
有没有对下面问题的想法啊?
满栀

2024-08-02 00:20:25

$.post("news.html?para=getName",function(result){
alert(result);
alert(result.users[0].name);
},"json");

在你这段ajax函数改成这样 指明返回内容的格式为json就行 不用evel转对象了 ,api中讲的很清楚
追问
恩,你这样也可以,不过本来我就是getJSON的,而且可以,后来改成post再改回来就不行了...
追答
那可能是因为ajax缓存了 反正就是json那点事儿
追问
恩,有可能
下面那个知道为什么吗?dispatchaction的
追答
后面的是什么意思 没明白
追问
用过动态action么?
素颜繁华梦

2024-08-02 00:22:19

alert(result.users[0].name);改成alert(result.users.name);试试 我感觉json的数据返回用
result.xxx.xxx取就可以,相当于
result.getUsers().getName();
追问
no no no..现在已经能用了
你的这个我没有试过,不过我觉得不可取啊,因为json理的users不是一个的话就不行了
追答
呵呵,json是key-value格式的数据,最好不起名字一样的,这样转成map也好转
追问
恩,我只知道json的这种用法...还没学这个,一会看看