【问题标题】:AJAX cannot read echo data from PHP?AJAX 无法从 PHP 读取回显数据?
【发布时间】:2014-09-17 13:40:15
【问题描述】:

我一直在测试我的寄存器,并且在一定程度上代码可以正常工作。但似乎无法比较 PHP 脚本中的文本。

我尝试使用现有的电子邮件和用户名、现有的电子邮件、现有的用户名和两个不存在的用户名和电子邮件。但是都给了我回显的数据+失败(这是JQuery中的结束条件语句)。

JQuery:

$( function ajaxRegCheck() {
    $('#reg_form').submit(function(e) {
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: 'save_register.php',
            data: $(this).serialize(),
            success: function(data)
            {

                if(data == "un_em_exists"){
                    alert(data+" Username and Email exists.");
                } else if(data == "un_exists") {
                    alert(data+" Username exists.");
                } else if(data == "em_exists") {
                    alert(data+" Email exists.");
                } else if(data == "success"){
                    alert(data+" Created account.");
                } else {
                    alert(data+ " Fail.");
                }
            } 
        });
    });
});

PHP 注册:

if(($exist_check_user->rowCount() > 0) AND ($exist_check_em->rowCount() > 0)){
    echo "un_em_exists";
} else if($exist_check_user->rowCount() > 0) {
    echo "un_exists";
} else if($exist_check_em->rowCount() > 0) {
    echo "em_exists";
} else {
    $sql = "INSERT INTO Users (username, email, password) VALUES (:r_un, :r_em, :r_pw)";
    $q = $cdb->prepare($sql);
    $q->execute(array(':r_un'=>$reg_username,':r_em'=>$reg_email,':r_pw'=>$reg_pw));
    echo "success";
}

我不明白为什么它会跳过 JQuery 中的 if 语句并直接进入最后一个 else 条件。明明从PHP端正确输出字符串,但是好像不能比较字符串?

例如,如果我使用现有的用户名和电子邮件注册,它会回显“un_em_exists”响应。在 JQuery 上,警报与此匹配,因为它说“un_em_exists Fail.”,这是最后一条语句。

更新:

找到了问题,但不太确定如何解决。我测试了字符串长度,作为回报,我得到了字符串长度 16(从 JQuery 端测试),在 PHP 上我得到 12 - 这是“un_em_exists”的正确数量。

我不知道额外的 4 个金额是从哪里来的。

【问题讨论】:

  • 你检查过字符串长度吗?即可能有额外的新行或其他空格。
  • 在PHP中发送代码并在客户端转换并获取其字符串值会更容易。
  • 检查在您的 Ajax 调用期间返回的 data 的数据类型,您可能会得到一个对象而不是字符串,这会导致您的所有字符串比较都是错误的。
  • 可以确认。数据类型为字符串。我用过:alert(jQuery.type(data)+ "Fail.");

标签: javascript php ajax echo


【解决方案1】:

使用 data.trim() 成功修剪数据后,可能会有空格

【讨论】:

  • 谢谢!我不认为这会是答案,因为从肉眼来看,它看起来是一样的。但是在我测试了两个字符串长度之后,我意识到有一个问题,因为它产生了 16 个字符而不是 12 个字符。我不知道额外的 4 个字符是从哪里来的。
【解决方案2】:

确保返回值是这样的文本:

$( function ajaxRegCheck() {
    $('#reg_form').submit(function(e) {
        e.preventDefault();
        $.ajax({
            dataType: 'text',
            type: "POST",
            url: 'save_register.php',
            data: $(this).serialize(),
            success: function(data)
            {

                if(data == "un_em_exists"){
                    alert(data+" Username and Email exists.");
                } else if(data == "un_exists") {
                    alert(data+" Username exists.");
                } else if(data == "em_exists") {
                    alert(data+" Email exists.");
                } else if(data == "success"){
                    alert(data+" Created account.");
                } else {
                    alert(data+ " Fail.");
                }
            } 
        });
    });
});

【讨论】:

  • 刚刚添加了这个,并在退出时添加了以下评论;仍然是相同的行为。
猜你喜欢
  • 2015-06-25
  • 2021-11-13
  • 2016-10-21
  • 2020-04-15
  • 2019-11-12
  • 1970-01-01
  • 2022-01-27
  • 2012-09-22
  • 1970-01-01
相关资源
最近更新 更多