【问题标题】:PHP adding unwanted line break to ajax resultPHP向ajax结果添加不需要的换行符
【发布时间】:2015-04-14 20:10:00
【问题描述】:

为什么 PHP 在我的简单 AJAX 结果中添加换行符?这再简单不过了。我错过了什么吗?

这是我的 JS:

$(document).ready(function() {
    $('#inputEmail').change(function(){
        // Check to see if email exists
        var email = $('#inputEmail').val();
        //alert(email);
        $.ajax({
            url : "php/checkUserEmail.php",
            type: "POST",
            dataType: "text",
            data: {email: email},                
            success: function(data){
                alert(data);
                if(data === "exists"){
                    alert(data);                        
                }                    
            },
            error: function (jqXHR, textStatus, errorThrown)
            {
                alert("ajax error");
            }
        });              
    });
});

这是我的 php:

<?php 

include_once("db_connect.php");

// Catch results sent via $.post and assigns them to php variables.
$email = $_POST['email'];

// Check to see if email exists
$sql = "SELECT * FROM users WHERE email = '$email'";
$conn->prepare($sql);
$result = $conn->query($sql);
$rowCnt = $result->num_rows;

if($rowCnt == 0){
    echo trim('new');
}else{
    echo trim('exists');
}

无论出于何种原因,我的结果数据字符串都以 /r/nexists 的形式返回,而不仅仅是存在,因此永远不会进入我的 if 块,即使我只使用 == 来评估条件。我尝试添加 trim() 函数,你可以看到没有结果。非常感谢您的帮助,因为这花了我几个小时的时间来解决一个愚蠢的 if 条件。

【问题讨论】:

  • 如果您将 PHP 作为独立运行,它会表现出相同的行为吗?
  • 否 它似乎没有。我刚刚创建了一个 index.php 页面,其中包含简单的 mysqli 对象,然后是我的代码(而不是 incude(db_connect.php) ),它没有在 echo 中添加换行符。
  • 你也可以在客户端剪裁,data.trim() 也可以quit using alert() for troubleshooting.,改用console.log()
  • 试图在客户端上修剪但没有结果。我应该这样做。我不喜欢无缘无故发生的事情。感谢您的帮助
  • 我将 checkUserEmail.php 替换为 exists 的文本值,看看是否可以解决问题。如果是这样,您就可以开始重新添加内容了。

标签: javascript php ajax line-breaks


【解决方案1】:

检查php问号前后是否有“空”空格,这些换行符也表示为响应的一部分。

I mean here
<?php?>
And here

【讨论】:

  • 没有空间。代码如上所示。
  • 只是让你知道我尝试了一些东西,我确实删除了 trim() 函数。我还从 echo 语句中删除了所有空格。现在是这样:echo'exists';
  • 您是否还检查了db_connect.php 文件以确保&lt;?php 之前没有新行
  • 也许你没有关闭 php 标签?也许你在那儿留了一个空格。
  • 知道了。好的,我试过了。我的
【解决方案2】:

我找到了解决方案,但我仍然不喜欢或不理解正在发生的事情。您应该能够为结果返回一个简单的字符串。无论如何,我所做的只是将从数据库返回的行数回显到我的 ajax 成功函数。然后,我检查了客户端上的结果是否 > 0 并最终在我的 IF 块中。这是我所做的:

JS:

$(document).ready(function() {
    $('#inputEmail').change(function(){
        // Check to see if email exists
        var email = $('#inputEmail').val();
        //alert(email);
        $.ajax({
            url : "php/checkUserEmail.php",
            type: "POST",
            dataType: "text",
            data: {email: email},                
            success: function(data){                    
                console.log(data);
                if(data > 0){
                    console.log("HURRAY!  I'm in my IF");   
                }                    
            },
            error: function (jqXHR, textStatus, errorThrown)
            {
                alert("ajax error");
            }
        });              
    });
});

这里是 PHP:

    // Catch results sent via $.post and assigns them to php variables.
    $email = $_POST['email'];

    // Check to see if email exists
    $sql = "SELECT * FROM users WHERE email = '$email'";
    $conn->prepare($sql);
    $result = $conn->query($sql);
    $rowCnt = $result->num_rows;

    echo $rowCnt;
?>

这可行,实际上可能更优雅一些,但您应该能够毫无问题地返回一个字符串。

约翰

【讨论】:

  • 这确实不是一个解决方案,我们一直从 PHP 中返回文本,而没有回车/换行。
  • 你是对的。不是解决所描述问题的方法,只是一种不同的方式来到达我要去的地方。还是想弄清楚是什么问题。
  • 我现在正在尝试复制,但没有任何运气。
  • 好的。我只是重写了代码以再次传递一个字符串,现在它工作正常。之前一定有一些不可见的编码字符或其他东西。当我更改为返回整数而不是字符串时,它也可以工作,但是在重写服务器端 if 条件以返回“存在”或“新”时,它现在返回没有换行符的字符串。不知道那里发生了什么,但我花了几个小时试图弄清楚。乌格。
猜你喜欢
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2011-10-23
  • 2017-12-07
相关资源
最近更新 更多