首先感谢您的关注,自己搞了一个晚上解决不了。未简化代码,特别将出问题的地方重新写了两个网页。
废话不说,上代码:用来删除返回网页其他部分的js代码del_body.js:
// JavaScript Document
function del_body(str){//消除异步通讯返回来网页中<body>以外的代码
var a1,a2
str=unescape(str);
a1=str.indexOf("<body>")+6;
a2=str.indexOf("</body>")-2;
return str.substring(a1,a2);
}异步应答网页test_char.asp,纯粹就是返回一个字母"a":
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!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>返回字符以作比较</title>
</head><body>
<%= response.Write("a") %>
</body>
</html>发起异步网页test_char_compare.html:
<!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">
<script type="text/javascript" src="../Scripts/del_body.js"></script>
<script type="text/javascript">
var xmlHttp=false;
try {
xmlHttp=new XMLHttpRequest();
} catch (trymicrosoft){
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
} catch(failed){
xmlHttp=false;
}
}
}
if (!xmlHttp)
alert("经测试,您的计算机不能应用异步数据(ajax)技术。");
function change() {//响应罪犯姓名更换
var url = "test_char.asp";//建立异步通讯所需要的连接字符串
xmlHttp.open("POST",url,true);//设置异步通讯方式为GET(也可以为POST或者HEAD),表明连接目标url,异步通讯为真
xmlHttp.onreadystatechange = test_record;
xmlHttp.send(null);//发出异步通讯
}function test_record(){
var x1;
if (xmlHttp.readyState == 4 )//如果服务器响应完成
if (xmlHttp.status==200){//如果返回状态码等于200,表明按预定目标顺利完成,没有意外
x1=del_body(xmlHttp.responseText);
alert(x1);//显示返回内容
alert(typeof(x1));//测试返回内容类型,怕不一致
alert(typeof("a"));//测试需要与之比较的类型,怕不一致
if (x1=="a") 
document.getElementById("display_name").innerHTML="返回的字母是a";
else
document.getElementById("display_name").innerHTML="返回的字母不是a";
}
else if (xmlHttp.status == 404)//返回码为404,即没有找到制定响应网页目标
alert("没有找到指定的处理网页,执行未能正常执行。");
else
alert("服务器错误:错误代码:" + xmlHttp.status);
}
</script>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
<p id="display_name" >测试异步通讯返回的值</p>
<input name="test" type="button"  value="发起测试" onclick="change()"/>
</body>
</html>结果很奇怪,测试显示返回a,类型string;准备与之比较的类型也是string,但是if语句始终比较不成立,跳到“返回的字母不是a”,折腾了很久都没有解决。请大家帮忙看看。谢谢!!!

解决方案 »

  1.   

    LZ的偏移计算错误了
      <script type="text/javascript">
    function del_body(str){//消除异步通讯返回来网页中<body>以外的代码
    var a1,a2
    str=unescape(str);
    a1=str.indexOf("<body>")+6+1;
    a2=str.indexOf("</body>")-2+1;
    return str.substring(a1,a2);
    }
    alert( del_body( "<body>a</body>") );
      </script>
      

  2.   

    x1=x1.repalce(/\r/g,"")
    x1=x1.repalce(/ /g,"")
    x1=x1.repalce(/\n/g,"")
    有空格、换行等字符
      

  3.   

    可能是有空格或换行符在里面, 删除函数改成这样试下return str.substring(a1,a2).replace(/(^\s+)|(\s+$)/g, "");
      

  4.   

    编码的问题。
    你把test_char_compare.html中的JS脚本放到
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    下面来,同时顶部最好加:<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
    ===============================如果还不可以,你改用GB2312,同时test_char.asp修改为简单的:
    <%
    Response.CharSet ="gbk"
    response.Write("a")%>
    再看看。
      

  5.   

    漏了一句:
    你把test_char_compare.html中的JS脚本放到
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    下面来,同时顶部最好加:
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
    <%
      Response.CharSet="UTF-8"
    %>

      

  6.   

    谢谢各位,以下是测试结果:
    wqkjj:您的说法不正确,因为这段代码我已经反复用过很多次了,从来没有出现过问题,如果想您说的那样,那么,alert(x1)就会把body显示出来,不过谢谢你的关心;
    toury:按您的解决办法,问题依旧,不过可能是我还没有完全按您的方法来解决;
    Free_Wind22、net_lover:正解,按照两位的方法处理,结果都合乎要求。不过搞不清楚,为什么alert显示没有出现空格等字符呢?我马上测试一下字符长度看看。
    再次感谢各位,马上给分(不好意思,分太少了)
      

  7.   

    正则表达式有问题
    用来删除返回网页其他部分的js代码del_body.js:
    // JavaScript Document
    function del_body(str){//消除异步通讯返回来网页中<body>以外的代码
    var a1,a2
    str=unescape(str);
    a1=str.indexOf("<body>")+6;
    a2=str.indexOf("</body>");  //匹配到就可以了,不用-2
    return str.substring(a1,a2);
    }