ajax与servlet交互问题,请高手来指点一下菜鸟!

游侠KnighT 软件工程师  2010-10-12 09:59:19
JS代码如下:

<script type="text/javascript">
var request;
function createRequest(){
if(window.ActiveXObject){
request = new ActiveXObject("Microsoft.XMLHTTP");
}else{
request = new XMLHttpRequest();
}
}
function checkID(){
var id = $("#id").val();
var url = "servlet/CheckID?id=" + id;
createRequest();
request.open("post", url, true);
request.onreadystatechange = processResponse;
request.send(null);
}
function processResponse(){
var res = request.responstText;
if(request.readyState == 4){
if(request.status == 200){
if(res == "success"){
alert("ID已经存在!");
}
}
}else{
alert("请求出现异常!");
}
}
$("#regist").click(function(){
alert("注册");
});
$("#submits").click(function(){
$("#loginForm")[0].submit();
});
</script>

为测试,servlet的dopost方法中只写了一条输出语句。如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter pw = response.getWriter();
System.out.println(request.getParameter("id"));
pw.print("success");
return;
}


但实际测试时,始终提示“请求出来异常”,我想问问,是我哪里没有配置对吗?
...全文
327 点赞 收藏 32
写回复
32 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yjflinchong 2010-10-13
有可能根本没有进入servlet吧
回复
magong 2010-10-13
[Quote=引用 27 楼 ydsxi1314 的回复:]

System.out.println(request.getParameter("id"));这句没有打印
[/Quote]
Servlet访问问题。
请如我24楼所说,先实现doGet,再找出该Servlet准确的URL,然后我们再一起看那JS中url应该怎么写。
回复
游侠KnighT 2010-10-13
现在错误很明确,没有执行到servlet,但servlet路径的各种写法我都试过了!
回复
游侠KnighT 2010-10-13
System.out.println(request.getParameter("id"));这句没有打印
回复
游侠KnighT 2010-10-13
我不明白23楼的哥们zhuchao_ko:你为什么一直强调返回“success”这个问题,
现在request.status == 404你明白吗?根本都没有执行到if(res == "success")这个判断上,
也许你说的对,返回值确实不只success这7个字母,但是,但是现在还没有走到这一步呢啊!
你是不是没看清楚大括号的配对?再次帖代码:

function checkID(){
var id = $("#id").val();
var url = "/servlet/CheckID?id=" + id;
alert(url);
createRequest();
request.open("post", url, true);
request.onreadystatechange = processResponse;
request.send(null);
}
function processResponse(){
if(request.readyState == 4){
if(request.status == 200){
var res = request.responseText.replace(/(^\s*)|(\s*$)/g,"");
if(res == "success"){
alert("ID已经存在!");
}else{
alert("可以注册!");
}
}else if(request.status == 404){
alert("url不存在!");
}else{
alert("请求出现异常!");
}
}
}


目前执行后,弹出“url不存在”
回复
宁波朱超 2010-10-13
[Quote=引用 24 楼 magong 的回复:]

察看Servlet路径的方式:
最保险的做法:web.xml中url-mapping
简便的做法:在Eclipse中Servlet类结点上右击鼠标运行之,浏览器URL栏能看到,为了能看到直接访问的效果,在doGet中调用doPost
[/Quote]

不是这个原因,他都说了 System.out.println(request.getParameter("id"));
可以打印出来的 那就说明SERVLET肯定没问题了
PS:其实我已经说的很清楚了,还不明白我也没办法了。
回复
magong 2010-10-13
察看Servlet路径的方式:
最保险的做法:web.xml中url-mapping
简便的做法:在Eclipse中Servlet类结点上右击鼠标运行之,浏览器URL栏能看到,为了能看到直接访问的效果,在doGet中调用doPost
回复
宁波朱超 2010-10-13
[Quote=引用 20 楼 ydsxi1314 的回复:]

帖一下servlet的dopost代码:
Java code

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text……
[/Quote]

你 pw.print("success");
这句代码 返回到 请求页的时候并不是 success 这6个字母!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

所以你 那个判断永远都是 false!

to 18楼
那是我打错了
回复
csfengping 2010-10-13
试试返回整数1,是否能判断成功!
回复
游侠KnighT 2010-10-13

function checkID(){
var id = $("#id").val();
var url = "/servlet/CheckID?id=" + id;
alert(url);
createRequest();
request.open("post", url, true);
request.onreadystatechange = processResponse;
request.send(null);
}
function processResponse(){
if(request.readyState == 4){
if(request.status == 200){
var res = request.responseText.replace(/(^\s*)|(\s*$)/g,"");
if(res == "success"){
alert("ID已经存在!");
}else{
alert("可以注册!");
}
}else if(request.status == 404){
alert("url不存在!");
}else{
alert("请求出现异常!");
}
}
}


url不存在,我这样写url不可以吗?我加上<%=request.getContextPath()%>也不行!
回复
游侠KnighT 2010-10-13
帖一下servlet的dopost代码:

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
PrintWriter pw = response.getWriter();
System.out.println(request.getParameter("id"));
pw.print("success");
}

只为测试交互,没有实现任何功能!
回复
游侠KnighT 2010-10-13
问题找到了,原来是因为我在我配置struts2时
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.*</url-pattern>
</filter-mapping>
<url-pattern>写成了*.*,这样导致在进入servlet时,struts2过滤器将自动将自动拦截进入servlet的操作,所以无论我怎样访问servlet都是无法找到。
现在将原<url-pattern>*.*</url-pattern>改成<url-pattern>*.jsp</url-pattern>问题得以解决。
同时非常感谢大家的热心帮忙,结帖了!
回复
sowuqing 2010-10-13
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>

<body>
<script type="text/javascript">
function createRequest()
{
if(window.XMLHttpRequest)
{
return new XMLHttpRequest();//mozilla浏览器
}
else if(window.ActiveXObject)
{
try
{
return new ActiveXObject("Msxml2.XMLHTTP");//IE老版本
}
catch(e)
{}
try
{
return new ActiveXObject("Microsoft.XMLHTTP");//IE新版本
}
catch(e)
{}
if(!xmlHttpRequest)
{
return false;
}
}
}
var xmlHttpRequest;
function checkID()
{
var id=document.getElementById("id").value;
var url = "/Test/servlet/TestServlet?id="+id;
xmlHttpRequest=createRequest();
xmlHttpRequest.onreadystatechange=processResponse;
xmlHttpRequest.open("POST",url,true);
xmlHttpRequest.send(url);
}
function processResponse()
{
if(xmlHttpRequest.readyState==4 && xmlHttpRequest.status==200)
{
var res=xmlHttpRequest.responseText;
if(res=="success")
{
alert("ID已存在");
}

}
}
$("#regist").click(function(){
alert("注册");
});
$("#submits").click(function(){
$("#loginForm")[0].submit();
});
</script>
<form action="">
<input id="id" type="text" name="id">
<button onclick="javascript:checkID()">
测试
</button>
</form>
</body>
</html>
Servlet 里跟你的一样;名字叫TestServlet
Test是我的项目名字 可以运行成功,你看看吧。
回复
tubage408 2010-10-12
var url = "servlet/CheckID?id=" + id;这里有问题把,加上contextpath
回复
magong 2010-10-12
[Quote=引用楼主 ydsxi1314 的回复:]
function processResponse(){
var res = request.responstText;
if(request.readyState == 4){
if(request.status == 200){
if(res == "success"){
alert("ID已经存在!");
}
}
}else{
alert("请求出现异常!");
}
}
[/Quote]
function processResponse(){
if(request.readyState == 4){
var res = request.responseText;
if(request.status == 200){
if(res == "success"){
alert("ID已经存在!");
}
}else{
alert("请求出现异常!");
}
}
}
回复
小武茶庄 2010-10-12
你判断的地方放错了,即使成功也总是提示‘请求出现异常’.

function processResponse(){
if(request.readyState == 4){
if(request.status == 200){
var res = request.responseText;
if(res == "success"){
alert("ID已经存在!");
}else{
alert("ID可以用");
}
}else{
alert('请求失败');
}
}
}

红色那段你放在最上面,IE8是有问题的。
其他你确定一下你的servlet是否能执行到.
回复
xiaochengfu1 2010-10-12
var url = "servlet/CheckID?id=" + id;


先直接在浏览器写上url试试可以输出语句不
回复
游侠KnighT 2010-10-12
我现在就是想知道,为什么会请求不成功呢?
回复
cnmb1 2010-10-12
楼上正解,不过,如果始终没有执行到
“alert("ID已经存在!");”

的话,那可能url或其它什么地方也出问题了
回复
小武茶庄 2010-10-12
你那样子判读,总是提示“请求出来异常”是正常的。因为"request.readyState "这里有四个状态。
第一次if(1==4),不成立,所以就执行else里面的.第二次......同样!
还有"var res = request.responstText”获取请求的返回值,一般是request.status == 200请求成功时候才得到的.
回复
加载更多回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-10-12 09:59
社区公告
暂无公告