我正在尝试创建我可以在javascript代码中使用的PHP函数。
<!DOCTYPE html>
<?php
include 'pdo_connect.php';
function pleaseWork($query) {
return dataQuery($query)->fetchAll();
}
function makeQuery($query)
{
$work = pleaseWork($query);
$json = json_encode($work);
}
?>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<title>Admin check</title>
<meta charset="UTF-8">
</head>
<body>
<script type='text/javascript'>
<?php makeQuery("SELECT * FROM `grupy`");?>
var jArray = <?= $json ?>;
console.log(jArray);
</script>
当然它不起作用,因为JS块中的代码对文件开头的变量一无所知。我怎么做?我从未使用过AJAX或其他任何东西,所以我不知道该怎么做。
答案 0 :(得分:3)
您需要更详细地了解OOP(面向对象编程)。也许搜索依赖注入或异常。此外,您需要创建一个PHP脚本来接受您的ajax请求并调用必要的函数或方法,这些函数或方法应该全部分成自己的文件和类。这将使不同的数据层彼此分离(即表示,业务逻辑,数据)。您还应该投入一些时间来学习MVC(模型视图控制器)的内容。这将有助于您了解分离的重要性。
现在,我将向您展示您的问题的快速解决方案。让我们假设你的文件结构都在同一个目录中:
|--- ajax_requests.php
|--- Database.php
|--- Functions.php
|--- index.php
index.php 是您的HTML / jQuery所在的位置:
<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<title>Admin check</title>
<meta charset="UTF-8">
</head>
<body>
<script type='text/javascript'>
$.ajax({
type: "post",
url: "ajax_requests.php",
data: {request: "get_grupy_json"},
success: function(result){
console.log(result);
}
});
</script>
注意我们如何使用jQuery来发出Ajax请求。我们正在向文件post
发送ajax_requests.php
个请求,将get_grupy_json
作为request
参数发送。前端视图中不应出现SQL查询。
ajax_requests.php 接收请求,获取Database对象并将其发送到Functions对象,然后检查请求是否作为Functions类的方法存在,如果存在,则运行方法并将结果转换为json(记得自己添加错误检查):
<?php
if (!empty($_POST)) {
$method = $_POST['request'];
include 'Database.php';
include "Functions.php";
$db = new Database();
$functions = new Functions($db);
if (method_exists($functions, $method)) {
$data = $functions->$method();
header('Content-Type: application/json');
echo json_encode($data);
}
}
<强>的functions.php 强>
class Functions
{
private $db;
public function __construct(Database $db)
{
$this->db = $db;
}
public function get_grupy_json()
{
$query = "SELECT * FROM `grupy`";
$result = $this->db->dataQuery($query);
return $result->fetchAll();
}
}
<强> database.php中强>
class Database
{
private $conn = null;
public function __construct()
{
try {
$username = "root";
$password = "root";
$servername = "localhost";
$dbname = "test";
$this->conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
trigger_error("Error: " . $e->getMessage());
}
}
public function dataQuery($query, $params = array())
{
try {
$stmt = $this->conn->prepare($query);
$stmt->execute($params);
return $stmt;
} catch (PDOException $e) {
trigger_error("Error: " . $e->getMessage());
};
}
}
这是我会做的粗略模型。我希望您了解它是如何分离的,以便您可以在应用程序增长时轻松添加功能。
答案 1 :(得分:0)
AJAX不能像这样工作。基本上,PHP的产品是一个HTML页面(带有JS),它是在浏览器中根据请求呈现的。当用户执行操作时,应该导致显示由AJAX检索的数据,浏览器会发出另一个请求,可能是不同的PHP脚本。该请求的结果不会显示给用户,因为在执行第一个请求时,它会被传递给当前显示页面的JS中的函数(这就是使其成为AJAX的原因)。然后,此函数可以以任何方式处理数据。