servlet如何传值给回调函数

wnba1983 2008-04-24 05:41:56
我有一个html页面。。

<html>
<head>

<title>Ajax Auto Complete</title>


<script type="text/javascript">

function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}



function findNames() {

createXMLHttpRequest();
var url = "/servler_ajax/AutoCompleteServlet";
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.onreadystatechange = callback;
xmlHttp.send(null);
}

function callback() {

if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
alert(xmlHttp.responseText)
} else if (xmlHttp.status == 204){
clearNames();
}
}
}
</script>
</head>
<body>
Names: <input type="text" size="20" id="names" onkeyup="findNames();" style="height:20;"/>
<div style="position:absolute;" id="popup">
<table id="name_table" bgcolor="#FFFAFA" border="0" cellspacing="0" cellpadding="0"/>
<tbody id="name_table_body"></tbody>
</table>
</div>
OK
</body>
</html>




求人帮我改一下这个java代码,目的能传个字符串给上面的html页面中的callback回调函数,让它把“abc”alert出来,
如果上面请求的是一个jsp页面,那非常简单,直接在jsp页面中用out.write就可以了,那现在请求一个servlet如何得到同样的效果,谁帮我该一下这个java代码?
package cn.ht;
import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;
public class AutoCompleteServlet extends HttpServlet {

protected void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

response.getWriter().println("abc");

}
}

...全文
476 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
guying1028 2008-04-30
  • 打赏
  • 举报
回复
可以用json格式来传递一个对象
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
都是很好的建议! 值得学习
wnba1983 2008-04-28
  • 打赏
  • 举报
回复
你的代码我测试过,通过了,还的请教你一个问题
比如我现在想做ajax的分页,我原来的做法是这样的:比如我有一个页面(就叫1.html)定义一个from表单,这里面只有几个text文本域输入查询关键字,和一个查询按钮,在这个from外面我定义了一个div(它的id也叫div)
<from>
..............
</from>
<div id=div><div>

当我点击按钮的时候我提交表单到另一个页面table.html,在这个页面我定义了一个table
<table>
.......这里面是我动态查询数据库得到的内容。。。。。。
</table>

docment.getElementById("div").innerHTML=xmlHttp.responseText;将一整个table.html的内容显示到了这个div

我想请教2个问题:

第一,我上面提交表单的时候是通过“table.jsp?名字=值&名字2=值2;”的方式传递的,我不知道如何表单。

第二,我想把代码提交给一个servlet,提交个jsp,我的java代码都写到了页面,感觉有点乱,如果我把上面的请求提交给一个servlet,我传给回调函数的代码要怎么写,不会是out.write()标签加数据吧,那样很麻烦!我的想法是,有没有办法在1.html这个页面就定义好table,事先先把它隐藏,serlet只负责把数据封装成对象传给回调函数,当回调函数检测到相应时,再把table显示出来,并动态的想里面添加内容!

现在的问题是,servlet如何传一个对象给回调函数!

魔豆爸 2008-04-26
  • 打赏
  • 举报
回复
完整的代码
<html>
<head>

<title>Ajax Auto Complete</title>


<script type="text/javascript">
var xmlHttp = null;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}



function findNames() {

createXMLHttpRequest();
xmlHttp.onreadystatechange = callback;
var url = "servler_ajax/AutoCompleteServlet";
xmlHttp.open("get", url, true);
//xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

alert(xmlHttp);
xmlHttp.send(null);
}

function callback() {

if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
alert(xmlHttp.responseText)
} else if (xmlHttp.status == 204){
clearNames();
}
}
}
</script>
</head>
<body>
Names: <input type="text" size="20" id="names" onkeyup="findNames();" style="height:20;"/>
<div style="position:absolute;" id="popup">
<table id="name_table" bgcolor="#FFFAFA" border="0" cellspacing="0" cellpadding="0"/>
<tbody id="name_table_body"></tbody>
</table>
</div>
OK
</body>
</html>



public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/plain");
PrintWriter out = response.getWriter();
out.println("abc");

out.flush();
out.close();
}
魔豆爸 2008-04-26
  • 打赏
  • 举报
回复
呵呵,几个要注意的
1、response.getWriter()用完了要关掉。response.getWriter().close();
2、你的xmlHttp对象未定义。在createXMLHttpRequest()函数前加一句 var xmlHttp = null;
3、提交url路径错误var url = "/servler_ajax/AutoCompleteServlet";改成servler_ajax/AutoCompleteServlet不要servler_ajax前的斜杠。
4、servlet的doPost方法中这样写
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
out.println("abc");

out.flush();//刷新输出流
out.close();//用完关闭,避免占用内存
yaray 2008-04-26
  • 打赏
  • 举报
回复
out.print("abc");
  • 打赏
  • 举报
回复
转去jsp板块,不知道java

看你代码应该也没问题吧?
wnba1983 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 BlackBabyzmc 的回复:]
好像是你这个的问题哦~~你在FF下调下,可能你的status根本没有到200哦~~会发生404的错哦~~
var url = "/servler_ajax/AutoCompleteServlet";
应该是var url = "AutoCompleteServlet"; ????????????
你的servlet应该没错
[/Quote]
路径没有错,我servlet里面的打印语句已经执行了。
BlackBabyzmc 2008-04-25
  • 打赏
  • 举报
回复
好像是你这个的问题哦~~你在FF下调下,可能你的status根本没有到200哦~~会发生404的错哦~~
var url = "/servler_ajax/AutoCompleteServlet";
应该是var url = "AutoCompleteServlet"; ????????????
你的servlet应该没错
wnba1983 2008-04-24
  • 打赏
  • 举报
回复
还问个菜鸟问题,ajax如何提交form表单啊

52,792

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧