标题: 请教一个ajax的简单问题
sxpo
新手上路
Rank: 1



UID 47
精华 0
积分 0
帖子 24
翻译 0
原创 0
阅读权限 10
注册 2007-5-29
状态 离线
发表于 2007-6-1 21:24  资料  短消息  加为好友 
请教一个ajax的简单问题

为什么responseText里面已经是字符串 yes
都alert 出来了
可是 xmlHttp.responseText == "yes" 这个表达式却返回false呢?

代码如下:

html & javascript
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script language = 'javascript'>
//创建XMLHttpRequest对象实例,反正都差不多,省略
   
    //startRequest函数,
    function startRequest(username)
        {
            createXMLHttpRequest();            
            xmlHttp.open("GET","ckuser.php?name="+username,true);
            xmlHttp.onreadystatechange = handleStateChange;
            xmlHttp.send(null);
        }
        
   
    function handleStateChange()
    {
        if(xmlHttp.readyState==4)
        {
            if(xmlHttp.status==200)
            {
    //在这里alert xmlhttp.responseText 出来 已经取出 yes or no
    //但是xmlHttp.resposeText好像既不等于字符串yes 也不等于字符串no
    //这两个if 语句都直接跳过了
    if (xmlHttp.responseText=="yes")
    {
     document.getElementById("ckuser").innerHTML = '被注册';
    } else if (xmlHttp.responseText=="no")
    {
     document.getElementById("ckuser").innerHTML = '未注册';
    }
            }
        }
    }
</script>
//省略部分HTML代码
<input type="text" name="username" value=""  />
//省略部分HTML代码
php函数
<?php
    $username = $_GET["name"];
   
$link = mysql_connect('localhost:3306', 'root', '123456')
    or die('Could not connect: ' . mysql_error());
mysql_select_db('star') or die('Could not select database');  
$query="select id from users where username='".$username."';";
   
    $res=mysql_query($query) or die('Query failed: ' . mysql_error());
        if(mysql_num_rows($res)!=0)
        {
             echo "yes";
        }else
            {
               print "no";
            }
?>

[ 本帖最后由 sxpo 于 2007-6-1 21:36 编辑 ]

顶部
sxpo
新手上路
Rank: 1



UID 47
精华 0
积分 0
帖子 24
翻译 0
原创 0
阅读权限 10
注册 2007-5-29
状态 离线
发表于 2007-6-1 21:35  资料  短消息  加为好友 
如果 php 中把下面那段换成 如下:

        if(mysql_num_rows($res)!=0)
        {
             echo 1;
        }else
            {
               print 0;
            }

把javascript中同等代码换成下面这样

                if (xmlHttp.responseText==1)
               {
                document.getElementById("ckuser").innerHTML = '被注册';
        } else if (xmlHttp.responseText==0)
        {
               document.getElementById("ckuser").innerHTML = '未注册';
        }

这样的话就能正确的判断出responseText的返回值了 ,不明白为什么

不是responseText返回的是字符串么? 也就是返回值应该为"1"才对,那xmlHttp.responseText 就应该不等于数字1了啊?





总结一下:
当xmlHttp.responseText的返回值是一个字符串"1"的时候
xmlHttp.responseText == '1'  
xmlHttp.responseText == "1"
xmlHttp.responseText == "0"
xmlHttp.responseText == '0'
上面这些表达式返回的值都是false

只有 xmlHttp.responseText == 1 这个表达式返回的值才是 true 为什么会这样啊?

顶部
cid73
版主
Rank: 7Rank: 7Rank: 7



UID 40
精华 2
积分 25
帖子 32
翻译 0
原创 0
阅读权限 100
注册 2007-5-23
状态 离线
发表于 2007-6-1 21:49  资料  短消息  加为好友 
你可以 alert(request.responseText.length) 看看, 也许是因为输出了一些多余的空格所导致.

另外对这种情况你不如送 header, 如 header("MyHeader: " . true or false), 在客户端用 if ( request.getResponseHeader("MyHeader") ) 来判断.

顶部
cid73
版主
Rank: 7Rank: 7Rank: 7



UID 40
精华 2
积分 25
帖子 32
翻译 0
原创 0
阅读权限 100
注册 2007-5-23
状态 离线
发表于 2007-6-1 21:53  资料  短消息  加为好友 
如果用 if (xmlHttp.responseText === 1) 情况会不同的, 而且 XMLHttpRequest 要求服务器端内容编码必须为 Unicode.

顶部
sxpo
新手上路
Rank: 1



UID 47
精华 0
积分 0
帖子 24
翻译 0
原创 0
阅读权限 10
注册 2007-5-29
状态 离线
发表于 2007-6-1 22:43  资料  短消息  加为好友 


QUOTE:
原帖由 cid73 于 2007-6-1 21:49 发表
你可以 alert(request.responseText.length) 看看, 也许是因为输出了一些多余的空格所导致.

另外对这种情况你不如送 header, 如 header("MyHeader: " . true or false), 在客户端用 if ( request.getResponseHeader ...

感谢cid73老大!
说的真不错!
就是多了些东西
no 明明是两个字符,显示有5个长度,换行了 多了个/n 但也不是三个啊
我再研究研究

顶部
sxpo
新手上路
Rank: 1



UID 47
精华 0
积分 0
帖子 24
翻译 0
原创 0
阅读权限 10
注册 2007-5-29
状态 离线
发表于 2007-6-1 22:52  资料  短消息  加为好友 


        var lin = xmlHttp.responseText.Trim();
        if (lin=="yes")
        {
                document.getElementById("ckuser").innerHTML = '被注册';
        } else if (lin=="no")
        {
                document.getElementById("ckuser").innerHTML = '未注册';
        }

确实是...我把多余的字符去掉就可以了,下一步再看看这多余的字符怎么产生的

顶部
sxpo
新手上路
Rank: 1



UID 47
精华 0
积分 0
帖子 24
翻译 0
原创 0
阅读权限 10
注册 2007-5-29
状态 离线
发表于 2007-6-5 18:17  资料  短消息  加为好友 
BOM

顶部
Haohappy
超级版主
Rank: 8Rank: 8
PHPEye站长


UID 2
精华 11
积分 110
帖子 283
翻译 6
原创 1
阅读权限 150
注册 2007-5-2
状态 离线
发表于 2007-6-6 00:59  资料  短消息  加为好友  添加 haohappy 为MSN好友 通过MSN和 haohappy 交谈
呵呵,注意编码统一,用UTF-8一定要注意。

顶部
cid73
版主
Rank: 7Rank: 7Rank: 7



UID 40
精华 2
积分 25
帖子 32
翻译 0
原创 0
阅读权限 100
注册 2007-5-23
状态 离线
发表于 2007-6-6 20:17  资料  短消息  加为好友 
实际上用整个文档向客户端传送一两个变量我个人觉得很不明智, 容易出错是一回事, 还有当你要传送的是一组很简单的变量你就不得不用 JSON 或 XML, 这样简单的问题就变复杂了.

因此我总是利用 header 来传送简单变量, 比如在服务器端:

...
$controller->sendRequestSuccessHeader(); // header("Request-Success: 1");

or

$controller->sendRequestFailureHeader(); // header("Request-Failure: 1");
...

在客户端:

...
if ( Controller.getRequestSuccessHeader(request) ) // return request.getResponseHeader("Request-Success")
...


本帖最近评分记录
Haohappy   2007-6-7 11:02    +5   
顶部
sxpo
新手上路
Rank: 1



UID 47
精华 0
积分 0
帖子 24
翻译 0
原创 0
阅读权限 10
注册 2007-5-29
状态 离线
发表于 2007-6-6 21:27  资料  短消息  加为好友 


QUOTE:
原帖由 Haohappy 于 2007-6-6 00:59 发表
呵呵,注意编码统一,用UTF-8一定要注意。

一开始的时候我就把zde editplus dw编码全改成UTF-8了
但中间那个文档好象是用记事本打开过一次 中间就出了这个问题

但我到现在还是不知道那多出来的三个字符是怎么产生的,应该不是BOM
以后转过来再看

顶部
 


PHPEye开源社区


当前时区 GMT+8, 现在时间是 2008-12-3 10:15

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.027249 second(s), 7 queries , Gzip enabled

清除 Cookies - 联系我们 - PHPEye开源社区 - Archiver