最近在写一个留言板,用ajax实现.
用ajax向服务器发送请求,请问我能从java后台返回一个List到前台吗?类似于request.setAttribute("list",list);如果可以,要用什么获得?我现在网上看到的例子都是用xmlhttp.responseText取值。这样的话我能想到的就是在java后台,通过数据库操作返回一个list,然后在java后台里对这个list遍历一推out.print(),在前台就可以用xmlhttp.responseText获得我想要的值。请问除了这种方法,我能传一个list到前台,然后在前台遍历吗》?

解决方案 »

  1.   

    你想在JS端直接操作List,嗯,想法很好。想前后台紧密交互的话,可以用DWR,这个组件可以帮你解决不少问题。如果自行用Ajax或jQuery解决的话,你得设法在Servlet端把List转为JSON,JS能自行转换为JSON对象。
      

  2.   

    用ajax,只能这样。
    不过可以用jquery,用json类型传到前台来处理
      

  3.   

    按你这么说好像在java后台直接遍历然后out.print()更简单?
      

  4.   

    嗯,以前经常都是这么做的:后台输出HTML片段,比如:
    <TR>
      <TD>....</TD>
      <TD>....</TD>
      <TD>....</TD>
    </TR>
    前台拿到后直接就:getElementById("TableID").innerHTML=xmlhttp.responseText;
    不过从MVC角度出发,仍然建议应该用JSP负责输出这些片段,而不是Servlet玩out.print(); 哦,类型可以用 text/plain
      

  5.   

    对,不过从MVC角度出发,仍然建议应该用JSP负责输出这些片段,那应该怎么做?
      

  6.   

    没啥,就是:
    请求URL时,仍请求Action或Servlet,由其查询数据并生成List;
    然后重定向到JSP;
    JSP负责从request.getAttribute()得到List,然后输出HTML片段;
    这样浏览器端就可以得到HTML片段了。
      

  7.   

    这个不用ajax的话我知道,但是用ajax的话要用什么获得这个List?这正是我想要的。我现在能想到的就是在java代码里写html片段,然后用getElementById("TableID").innerHTML=xmlhttp.responseText;获得值。你说的那个要怎么获得值呢?
      

  8.   

    哦,你又绕回还是要直接获取List了,那么方法更简单:
    请求URL时,仍请求Action或Servlet,由其查询数据并生成List;
    然后利用JSON-Object或其它组件,将List转为 JSON 格式的字符串;
    然后用response进行输出就完毕了。这样浏览器端就可以得到JSON字符串了,直接eval就可以变成JSON对象了:
    var ojb = eval(xmlhttp.responseText);
    直接可以按对象方式访问:ojb[2].age
      

  9.   

    再问一个,如果我用的是Struts2写的,我回复留言后跳到一个方法中去,处理成功了,应该返回success还是什么呢?如果是success的话应该对应哪个页面?如果对应的还是返回到原来的页面去的话,我发现浏览器显示的是两个页面的内容。(即,我写的是一个播放视频的页面,当我留言成功后,再跳回到原来的播放页面,会有两个播放器)
      

  10.   

    和servlet一样,只是那个returntype 改为plainText
      

  11.   

    楼主你用Struts2啊,这个提供了对JSON的支持,参见这里:http://blog.csdn.net/wbb1983/article/details/2294494