PHP生成的HTML输出为jQuery $ .post请求添加\ r \ n字符和附加空格

时间:2012-10-12 01:43:10

标签: php .post

我有一个我正在实现的登录系统,当我使用从jQuery $ .post调用的PHP脚本时,它会添加\ r \ n,一些空格,然后再添加\ r \ n(用firebug查看)。

我正在尝试返回“成功”一词(或者其他人如果登录有问题),那么我可以确定登录请求的状态。在比较之前,我总是可以去除斜线并修剪输出,但是如果我能解决问题,我宁愿不必这样做。

这个PHP的输出是“Success \ r \ n \ r \ n”而不仅仅是“成功”:

<?php
// session_destroy();
$lname = $_POST['lname'];
$passhash = $_POST['pass'];

include 'includes/dbiconnect.php';

$loginStatus = "NA";
$query = "SELECT `txt_LOGINNAME`, `txt_PASSHASH`, `txt_PILOTNAME`, `bool_SYSADMIN` FROM `tbl_staff_details` WHERE `txt_LOGINNAME` = '{$lname}' AND `bool_CURRENT` = 1";
$result = mysqli_query($db_link,$query) or die('cannot open DB for login!');

if (is_null($result)) {
    $result_row_num = 0;
} else {
$result_row_num = mysqli_num_rows($result);
$loginDetail = mysqli_fetch_assoc($result);
}

switch (true) {
    case ($result_row_num == 0):
    $loginStatus = "Not Found";
        break;
    case ($result_row_num > 1):
        $loginStatus = "Too Many";
        break;
    case ($loginDetail['txt_LOGINNAME'] == $lname):
        // The Default:
        $loginStatus = "Incorrect Password";
        // Deviate from default only if PW Hashes match
        if ($passhash == $loginDetail['txt_PASSHASH']) {
            session_start();
            $_SESSION['FullName'] = $loginDetail['txt_PILOTNAME'];
            $_SESSION['SysAdmin'] = $loginDetail['bool_SYSADMIN'];
            $_SESSION['LoginName'] = $loginDetail['txt_LOGINNAME'];
        $_SESSION['lastActivity'] = time();
            $loginStatus = "Success";
        } // if
} // switch

mysqli_close($db_link);
print "{$loginStatus}";
?>

处理此问题的Javascript(包括一些'警告语句,以帮助我可视化输入/输出):

case (passwordentered != "" && usernameentered != ""):
    $("#errorField").val("I can work with this");
        var passwordhash = CryptoJS.SHA256(passwordentered);
        var str_hash = passwordhash.toString(CryptoJS.enc.Hex);
        alert(passwordhash);
        $.post( 'validatelogin.php' , {lname : usernameentered, pass : str_hash},
            function(output) {
                alert(output);
                switch (output) {
                    case "Success":
                        $("#errorField").val("Login Was Successful");
                        window.location("./daysheets.php");
                        break;
                    case "Incorrect Password":
                        $("#errorField").val("ERROR: Incorrect Password");
                        break;
                    case "Not Found":
                        $("#errorField").val("ERROR: User Not Found");
                        break;
                    case "Too Many":
                        $("#errorField").val("ERROR: Not Unique");
                    default:
                        var loginerror = output + ", Login Err";
                        $("#errorField").val(loginerror);
                }
        });
        break;

如果有人可以告诉我在jQuery获取附加字符时将其附加到输出的位置/原因,我们将不胜感激。

此致

Braedon

2 个答案:

答案 0 :(得分:2)

2条建议:

  1. 因为它是简单的单词,所以设置标题('Content-type:text / plain');
  2. 尝试删除结束?&gt;来自这个文件和includes / dbiconnect.php。这些文件中的一个或两个都有可能会有尾随字符返回,这就是你所看到的。

答案 1 :(得分:1)

如果在打开PHP标记之前或之后有任何空格,则会将其输出到浏览器。您可以使用jQuery的trim函数或返回一个json数组。

<?php
echo json_encode($loginStatus);
?>

您还可以将切换功能移动到PHP文件并输出登录状态消息。