register.php代码如下:
<head>
<script type="text/javascript">
function username_is_conform(username){  var xmlhttp;
  if(window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }
  else
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  if(username=="")
  {  document.getElementById('username_error').innerHTML="用户名不能为空。";  }
  else if(username.length>16 || username.length<6)
  {  document.getElementById('username_error').innerHTML="请输入6到16个字符的用户名。";  }
  else
  {
  xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
  {
  var if_exist=xmlhttp.responseText;
  if(if_exist=="true")
  document.getElementById('username_error').innerHTML="用户名已存在";
  }
  }
  xmlhttp.open("GET","is_user_exist.php?username="+username,true);
  xmlhttp.send();
  }}
</script>
</head>
<body>
<p><strong>用&nbsp;户&nbsp;名:&nbsp;&nbsp;</strong><input type="text" id="UserName" name="UserName" style="color:#000" onfocus="document.getElementById('username_error').innerHTML=''" onblur="username_is_conform(this.value)"><span id="username_error" /></span></p>
</body>is_user_exist.php代码如下:
<?php  $user=$_GET['username'];  if($user=="")
  {
  echo "<meta http-equiv=\"refresh\" content=\"0;url='login.php'\">";
  die();
  }  require('connect.inc');  mysql_select_db($dbname,$link_id);  $str_sql = "select count(*) from user where UserName='$user'";  $result=mysql_query($str_sql,$link_id);  $record=mysql_fetch_array($result);
  if($record[0]==1)
  echo "true";
  mysql_close($link_id);
?>问题来了..我先手动在数据库中收到输入一条用户名为aaaaaaa的数据..然后运行register.php,在text中输入aaaaaaa,然后使text失去焦点..然后就会自动验证,按理说aaaaaa是已经存在的,所以is_user_exist.php输出的应该是true,然后用if_exist=xmlhttp.responseText接收true,也就是if_exist为true,判断if条件满足,也就会输出用户名已存在,但是没有输出,只有把if里面的==改成!=才输出,也就是说true!=true???什么情况啊...求高人指教...我快晕了
我有试过把
  if(if_exist=="true")
  document.getElementById('username_error').innerHTML="用户名已存在";
改成:
  document.getElementById('username_error').innerHTML=if_exist;可以证明当输入已经存在的数据的时候..if_exist是为true的..我纠结的是既然if_exist为true..为什么if却无法判断...难道是编码的问题??

解决方案 »

  1.   

    if(if_exist=="true")
    改成if(if_exist==true)
      

  2.   

    var if_exist=xmlhttp.responseText;
    //加上下面3行代码看看字符串编码,是不是有什么不可见字符
    var strCode = '';
    for (var i = 0; i < if_exist.length; i ++) strCode += if_exist.charCodeAt(i);
    alert(strCode);
      

  3.   


    alert出来的结果是65279116114117101,我是新手,不懂,能不能帮忙分析下?
      

  4.   

    输出有BOM头(unicode编码65279,ZERO WIDTH NO-BREAK SPACE)。
    is_user_exist.php保存时去掉BOM选项就可以了。
      

  5.   

    http://zh.wikipedia.org/wiki/位元組順序記號
      

  6.   

    可能你返回的字符串中含有一个换行符,你打印responseText的值看看。
      

  7.   

    高手
    我用记事本编辑的保存的时候没有什么BOM选项。。怎么办。。
      

  8.   


    谢谢帮我解决问题。。我是新人。。怎么给分啊????还有··什么BOM选项帮忙解决下
      

  9.   

    用EditPlus或ultraedit另存一下,另存是选择文件编码为UTF-8无BOM.