Require_once搞乱JSON编码

时间:2016-10-03 09:11:59

标签: php ajax

我正在使用AJAX来触发我的validation.php文件。我想在该文件中连接到我的数据库,所以我包含了connect.php文件但是它引起了一些问题。

<script type="text/javascript">
$(document).ready(function(){
    $("#offer-form").submit(function(e){
        e.preventDefault();

        $.ajax({
            type : 'POST',
            data: {
                'name': $('#name-input').val()
            },
            url : 'validation.php',
            success : function(data) {
                $("#name-error").text(data["name-error"]);
            }
        });
        return false;
    });
})

validation.php

<?php
header('Content-Type: application/json');

$error = array("name-error" => "");

require_once "connect.php";

$error['name-error'] = "error";

echo json_encode($error);
?>

connect.php

<?php 
$serverName = "localhost";
$dbName = "test";
$username = "root";
$password = "";

try 
{
    $conn = new PDO("mysql:host=$serverName; dbname=$dbName",
                   $username,
                   $password, 
                   array(PDO::ATTR_EMULATE_PREPARES => false,
                         PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
                   );
    echo "Connected successfully"; 
}
catch (PDOException $e) 
{
    echo "Connection failed: " . $e->getMessage();
}
?>

我简化了我的代码。问题是在validation.php文件中使用 require_once 会导致 name-error no显示。另一件奇怪的事情是,当我在浏览器中输入... / validation.php时,此文件可以正常工作。我已经在我的主文件中使用了connect.php(包括上面显示的脚本),它工作正常。

3 个答案:

答案 0 :(得分:2)

所以这就是发生的事情:

您的浏览器会收到以下内容:

  

这是一个包含以下内容的JSON响应:

    Connected successfully
    {"name-error":"error"}

    Connection failed: bla bla bla
    {"name-error":"error"}

在任何一种情况下,这都是无效的JSON。

您可以通过其他方式解决此问题:

<强> connection.php

<?php 
$serverName = "localhost";
$dbName = "test";
$username = "root";
$password = "";


return new PDO("mysql:host=$serverName; dbname=$dbName",
                   $username,
                   $password, 
                   array(PDO::ATTR_EMULATE_PREPARES => false,
                         PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
                   ); 

<强> validation.php

<?php
header('Content-Type: application/json');

try {
    $connection = require "connect.php"; //You can still set the variable in "connect.php" and use it here, but this shows intent better
    echo json_encode(array("name-error" => "There was no error");
} catch (PDOException $e) {
    echo json_encode(array("name-error" => $e->getMessage());
}

答案 1 :(得分:0)

你必须告诉数据类型的响应

像这样

   $.ajax({
        type : 'POST',
        data: {
            'name': $('#name-input').val()
        },
        url : 'validation.php',
        dataType: json,
        success : function(data) {
            $("#name-error").text(data["name-error"]);
        }
    });

答案 2 :(得分:0)

问题解决了!我发现我的php脚本在JSON响应中的数组之前添加了“\ ufeff”。所有这些都是因为我的文件编码设置为带有BOM的UTF-8。谢谢大家的帮助!