我正在使用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(包括上面显示的脚本),它工作正常。
答案 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。谢谢大家的帮助!