日期:2014-05-16  浏览次数:20451 次

javascript 字符比较怎么出现这么奇怪的问题?
首先感谢您的关注,自己搞了一个晚上解决不了。未简化代码,特别将出问题的地方重新写了两个网页。
废话不说,上代码:

用来删除返回网页其他部分的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”,折腾了很久都没有解决。

请大家帮忙看看。谢谢!!!

------解决方案--------------------
JScript code
x1=x1.repalce(/\r/g,"")
x1=x1.repalce(/ /g,"")
x1=x1.repalce(/\n/g,"")

------解决方案--------------------
可能是有空格或换行符在里面, 删除函数改成这样试下
JScript code

return str.substring(a1,a2).replace(/(^\s+)|(\s+$)/g, "");