对于ajax的responseText方法获取服务器中文本内容出错

由于做注册页面需要在当前页面查询到数据库中是否已经存在该用户,所以就需要使用到ajax技术。以jsp为例

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ajax检测用户名</title>
<script >
var XHR; //定义一个全局对象
function createXHR(){   //首先我们得创建一个XMLHttpRequest对象
if(window.ActiveXObject){//IE的低版本系类
XHR=new ActiveXObject('Microsoft.XMLHTTP');//之前IE垄断了整个浏览器市场,没遵循W3C标准,所以就有了这句代码。。。但IE6之后开始有所改观
}else if(window.XMLHttpRequest){//非IE系列的浏览器,但包括IE7 IE8
XHR=new XMLHttpRequest();
}
}
function checkname(){
var username=document.myform.user.value;
createXHR();
XHR.open("GET","checkname.jsp?id="+username,true);//true:表示异步传输,而不等send()方法返回结果,这正是ajax的核心思想
XHR.onreadystatechange=byhongfei;//当状态改变时,调用byhongfei这个方法,方法的内容我们另外定义
XHR.send(null);
}
function byhongfei(){
if(XHR.readyState == 4){//
if(XHR.status == 200){
var textHTML=XHR.responseText;
textHTML=textHTML.replace(/(\n)+|(\r\n)+|(\s)+/g,"");
alert(textHTML);
   if(textHTML=="ok"){
   document.getElementById('checkbox').innerHTML="a"+textHTML;
   }else if(textHTML=="no"){
    document.getElementById('checkbox').innerHTML="bbik"+textHTML;
   }
  
}
}
}
</script>
</head>
<body>
<form name="myform">
用户名:<input type="text" name="user" οnblur="checkname();">
<span id="checkbox">1</span>
</form>
</body>
</html>

checkname.jsp(查询是否存在该用户)

<%@ page language="java" import="java.util.*" import="java.sql.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
   <%
request.setCharacterEncoding("utf-8");
  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String strConn = "jdbc:sqlserver://localhost:1433; DatabaseName=cs";
String user = "root";
String pa = "123456";
Connection conn =DriverManager.getConnection(strConn,user,pa);
Statement stat = conn.createStatement();
String name = request.getParameter("id");
   String sql1="select  * from users  where name='"+name+"'";
   ResultSet rs=stat.executeQuery(sql1);
     if(rs.next()){
     out.clear();
     out.print("no");
     }else{
     out.clear();
     out.print("ok");
   }
    %>

以上都是源码  

开始的时候我用responseText获取checkname.jsp中的out.print的文字  总会出错  明明在index.jsp中document.getElementById('checkbox').innerHTML=textHTML 得到的是checkname.jsp中的out.print的文字  但用if(textHTML=="ok")这总是不执行  我用alert(textHTML);输出才发现会将checkname.jsp中的html代码也输出来,从而找到问题的关键。就是要把checkname.jsp中的html代码给删除只留下java代码 也就是我上面的checkname.jsp代码  而后其中还会有换行空格等因素  就是用字符替换就行了  也就是textHTML=textHTML.replace(/(\n)+|(\r\n)+|(\s)+/g,""); 将其替换成“”  到此你将会发现已经大功告成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值