【问题标题】:AJAX - PHP responseText won't return anythingAJAX - PHP responseText 不会返回任何内容
【发布时间】:2014-08-08 00:18:53
【问题描述】:

我的 AJAX 注册脚本无法正常工作,因为我有 responseText() 函数,在我的 PHP 部分中,我根据 if 条件回显 0 到 12(和 100)。

如果例如:用户名无效,它需要给出错误,它需要给出 echo 2 和 responseText 然后需要给出错误。

但它不会,它不会给我任何东西(没有 var_dump、没有控制台错误、没有 php_error_log 和没有 Apache 错误日志)。

我的 Jquery/AJAX 部分:

    if(username.val() != '' && password.val() != '' && password2.val() != '' && email.val() != '' && terms.val != '')
    {
        var UrlToPass = 'action=aanmelden&username='+username.val()+'&password='+password.val()+'&password2='+password2.val()+'&email='+email.val()+'&av='+terms.val();

        $.ajax({
            type : 'POST',
            data : UrlToPass,
            url  : '/outgame/register.php',
            success : function(responseText)
            {
                if(responseText == 0)
                {
                  $.notify('U hebt geen gebruikersnaam opgegeven!', 'error');
                }
                else if(responseText == 1)
                {
                  $.notify('Uw gebruikersnaam moet meer dan 3 en minder dan 16 karakters bevatten!', 'error');
                }
                else if(responseText == 2)
                {
                  $.notify('Uw gebruikersnaam bevat ongeldige tekens!', 'error');
                }
                else if(responseText == 3)
                {
                  $.notify('U hebt geen wachtwoord opgegeven!', 'error');
                }
                else if(responseText == 4)
                {
                  $.notify('Uw wachtwoord moet meer dan 6 en minder dan 16 karakters bevatten!', 'error');
                }
                else if(responseText == 5)
                {
                  $.notify('U hebt geen tweede wachtwoord opgegeven!', 'error');
                }
                else if(responseText == 6)
                {
                  $.notify('De wachtwoorden komen niet met elkaar overeen!', 'error');
                }
                else if(responseText == 7)
                {
                  $.notify('U hebt geen mail adres opgegeven!', 'error');
                }
                else if(responseText == 8)
                {
                  $.notify('Uw mail adres is niet geldig!', 'error');
                }
                else if(responseText == 9)
                {
                  $.notify('Uw gebruikersnaam is al ingebruik!', 'error');
                }
                else if(responseText == 10)
                {
                  $.notify('Er is al een account aagemaakt met dit email adres!', 'error');
                }
                else if(responseText == 11)
                {
                  $.notify('U hebt onze AV niet geaccepteerd!', 'error');
                }
                else if(responseText == 12)
                {
                  $.notify('Uw invoer voor onze AV is ongeldig!', 'error');
                }
                else if(responseText == 100)
                {
                  $.notify('U bent succesvol geregistreerd', 'success');
                }
                else
                {
                  alert('error!');
                }
            }

        });
    }

    return false;
    })
});

(抱歉代码乱码)

我的 PHP 部分:

if(isset($_POST['action']) && $_POST['action'] == 'aanmelden')
{
    $stringUsername   = trim($_POST['username']);
    $stringPassword   = trim($_POST['password']);
    $stringPassword2  = trim($_POST['password2']);
    $stringEmail      = trim($_POST['email']);
    $stringTerms      = trim($_POST['av']);
    $bolean           = false;
    $stringsmallUser  = strtolower($stringUsername);

    $stmt = $mysqli->prepare("SELECT username FROM users WHERE username = ?");
    $stmt->bind_param('s', $stringsmallUser);
    $stmt->execute();
    $intMatchu = $stmt->num_rows();
    $stmt->close();

    $stmt = $mysqli->prepare("SELECT email FROM users WHERE email = ?");
    $stmt->bind_param('s', $stringEmail);
    $stmt->execute();
    $intMatche = $stmt->num_rows();
    $stmt->close();

    if(empty($stringUsername))
    {
        echo 0;
        $bolean = true;
    }
    elseif(strlen($stringUsername) < 3 || strlen($stringUsername) > 16)
    {
        echo 1;
        $bolean = true;
    }
    elseif(!ctype_alnum($stringUsername))
    {
        echo 2;
        $bolean = true;
    }

    if(empty($stringPassword))
    {
        echo 3;
        $bolean = true;
    }
    elseif(strlen($stringPassword) < 6 || strlen($stringPassword) > 16)
    {
        echo 4;
        $bolean = true;
    }

    if(empty($stringPassword2))
    {
        echo 5;
        $bolean = true;
    }
    elseif($stringPassword != $stringPassword2)
    {
        echo 6;
        $bolean = true;
    }

    if(empty($stringEmail))
    {
        echo 7;
        $bolean = true;
    }
    elseif(!filter_var($stringEmail, FILTER_VALIDATE_EMAIL))
    {
        echo 8;
        $bolean = true;
    }

    if($intMatchu != 0)
    {
        echo 9;
        $bolean = true;
    }
    elseif($intMatchu != 0)
    {
        echo 10;
        $bolean = true;
    }

    if(empty($stringTerms))
    {
        echo 11;
        $bolean = true;
    }
    elseif($stringTerms == 'avok')
    {
        echo 12;
        $bolean = true;
    }

    if($bolean == false)
    {
        echo 100;
    }
}

else
{
    exit();
} 

(查询有效,我已将它们放入 PHPmyAdmin 并且它们有效。)

提前感谢您! :-) 英语不是我的母语,所以我很抱歉我的语法错误。

【问题讨论】:

  • 在问题中包含您的代码;链接腐烂。
  • 您是否查看过网络选项卡中返回的值?
  • 我感觉您的 php echo 正在发送一些空白空间,因此为什么您的 jquery/javascript if 条件检查数字不起作用。看$.trim()
  • 快速提示:了解switch
  • @RezaMO Whitespace 在关闭 php 标记之后会这样做。

标签: php jquery ajax


【解决方案1】:

有一种更简单的方法可以实现您在此处尝试执行的操作。 您应该考虑将它们添加到数组中,而不是echo'ing 所有这些值。下面是一个伪示例来解释你是如何做到的。

$errors = array();
if(CONDITION MAKES ERROR) {
    $errors[] = 1;
} elseif(OTHER CONDITION MAKES ERROR) {
    $errors[] = 2;
}....etc

现在,在您运行所有这些 if 条件后,您可以简单地将其添加到该 php 脚本的末尾:

echo json_encode($errors);

这将 (Based on your comment) 返回一个如下所示的 json 数组:

[1,4,8,2]

允许您循环查看每个错误的 responseText 和回显消息。


或者,你也可以$.trim(),像这样:

$.trim(responseText);

or look at this answer to use regex (via the replace() method) instead.

【讨论】:

  • 我得到了这个回复:“[1,4,6,8,12] 。仍然有空白,我试图寻找一种通过数组获得响应的方法。但我不知道如何使用数组和 responseText。非常感谢您的帮助! :-)
猜你喜欢
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 2016-10-26
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多