我用Ajax异步提交后;再获取action的值,具体如下[code="java"]
页面
//异步条件下发请求
function _sendPara(){
(function($) {
$(function() {
$.ajax({
type:"post",
url:"sendPara_send.do?Ips="+Ips+"&TableNames="+TableNames,
success:function(res){
alert("${sendMeg}");
}
});
});
})(jQuery);
}[/code]
Action里的代码:[code="java"]request.setAttribute("sendMeg", message);[/code]
我在页面上的处理方式没能获取到值,请问各位我该如何获取呢
哥们你这个${sendMeg}就是el表达式 ${};我经常在js里用,没出过问题,但也没用过复杂的在js里。
给你解决问题***************************************
json返回的可以 对象 数组 数字 串 true false null,这个你可以在你引入的net.sf.json.JSONObject;把JSONObject去掉你点一下看都有什么类
JSONObject jsonObject = JSONObject.fromObject(object);
这个就是对象 要求应该是键值型,在不改变writerJSON方法的前提下你可以将你要传的值这样写:Map map =new HashMap();
String message=sendText.toString();
map.put("urlm", message);
this.writerJSON(map, reponse);
简单解释一下,你要是传的对象fromObject处理后就是个map,因为你的对象一定是有属性名和属性值。在页面绝对得到 :wink:
你的res里面是什么数据,你异步请求返回的数据类型是什么还是没有返回数据只是一个操作。
一个正常的解决思路是你用Ajax的json处理,这个你要是会的话我就不多说了,要是不会我几句话也说不明白。
另一个就是比较笨的办法,就是你在你的action请求给个结果页面,这个页面里的内容就是一个hidden类型的input,这个input的value就是你的${sendMeg},然后再你Ajax的回调函数里的res就是这个就是的那个小页面(其实里面可能就一个input),接下来你可以随意处理,你可以把这个res放到某个div里 反正是隐藏的,然后你在得到这个input的值。
这个方法貌似很笨但是是万能的。
额,你是在js里面写EL么?还真没看见有人这么试过。
ajax请求结果就不用放入request中了,直接用response.getWriter().write(text)输出结果
看错了,把${}看成EL了,可能是下面有句request.setAttribute("[i]sendMeg[/i]", message); 让我以为是从request中拿数据了。不过如果你想要在ajax中拿到返回的数据,直接用ls的response.getWriter().write(text)就行了。当然也可以写在request中,不过你要在页面上有一个控件id为[b]sendMeg[/b],然后把该控件的值设置为request.getAttribute(“[i]sendMeg[/i]”)。只有这样才能通过${[b]sendMeg[/b]}拿到值。
如果你会Ajax不会json你还真的学学,我简单给你说说 。
1、首先你得引入一个jar 我的版本是json-lib-2.1.jar在网上随便都能下到。
2、在后台写个方法:
public void writerJSON(Object object,HttpServletResponse reponse) {
JSONObject jsonObject = JSONObject.fromObject(object);
try {
Writer writer = reponse.getWriter();
System.out.println("Json Data :" + jsonObject.toString());
writer.write(jsonObject.toString());
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
我们通常把这个方法卸载BaseAction里,这个是准备工作,那个object可以是你的任何对象和属性。
3、一般将你的action 的返回值设置为void 在action方法里的最后返回你的数据
this.writerJSON(message, reponse);这两个参数是上面方法里的,如果你的只是个字符串就简单了,通常都是传出个对象然后对象点你的属性
4.页面应该:
$(function() {
$.ajax({
type:"post",
url:"sendPara_send.do?Ips="+Ips+"&TableNames="+TableNames,
dataType : "json",
success:function(res){
//这个地方就看你的数据类型了如果只是个String的
alert(res);
//如果你把那个字符串放入对象里可以这样写
alert(res.sendMeg);
}
});
});
就说这些了有什么不理解可以一起讨论,还有上面那哥们怀疑你那是不是el表达式,我确定 你用的${sendMeg}就是el表达式,而且在js里用时没问题的,但在回调函数里的去数据,是json最擅长的。
to andy_javahome:
你确定js里面用EL没问题?
aciont里面应该用response.getOutputStream().write("");
之所以你获取不到值,是因为你的页面没有再次编译。