无法构建 AJAX + PHP 请求
Failed to build AJAX + PHP request
我正在尝试发出 AJAX 请求,但无法构建正确的 php 文件。
我在 php_error.log 中收到此类错误。相同的 php 代码在通常的 html 文件中工作正常。
PHP Notice: Undefined variable: dbh
PHP Fatal error: Call to a member function prepare()
包含 jQuery 像这样
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
AJAX:
$(function() {
$('.openbook').click(function() {
function testAjax(handleData) {
$.ajax({
url:'getopen.php',
success:function(data) {
handleData(data);
alert(data);
}
});
testAjax(函数(输出){
document.getElementById('#thiswindow').innerHTML = 输出;
});
}
}
});
getopen.php:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<?php
if ( isset( $_SESSION['login'] ) ) {
$login = $_SESSION['login'];
$id=$_SESSION['id'];
$username="root";
$password="root";
$hostname = "localhost";
$dbname= "kotik";
function testdb_connect ($hostname, $username, $password) {
$dbh = new PDO("mysql:host=$hostname;dbname=kotik", $username, $password);
return $dbh;
}
try {
$dbh = testdb_connect ($hostname, $username, $password);
} catch(PDOException $e) {
echo $e->getMessage();
}
}
$title_select_query= $dbh -> prepare("SELECT title FROM books WHERE id = :id ORDER BY date DESC LIMIT 5,5 ");
$title_select_query ->execute(array(':id' => $id));
$title_select_query_result = $title_select_query->fetchColumn();
echo($title_select_query_result);
?>
</body>
</html>
这里有什么问题?我还尝试了 html+php 和 php 中的 getopen.php 结构。你能解释一下有什么区别吗?
编辑 2:AJAX 输出
编辑:根据一些变化:
<?php
session_start();
if ( isset( $_SESSION['login'] ) ) {
$login = $_SESSION['login'];
$id=$_SESSION['id'];
$username="root";
$password="root";
$hostname = "localhost";
$dbname= "kotik";
function testdb_connect ($hostname, $username, $password){
$dbh = new PDO("mysql:host=$hostname;dbname=kotik", $username, $password);
return $dbh;
}
try {
$dbh = testdb_connect ($hostname, $username, $password);
} catch(PDOException $e) {
echo $e->getMessage();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<?php
$title_select_query= $dbh -> prepare("SELECT title FROM books WHERE id = :id ORDER BY date DESC LIMIT 5,5 ");
$title_select_query ->execute(array(':id' => $id));
$title_select_query_result = $title_select_query->fetchColumn();
echo($title_select_query_result);
?>
</body>
</html>
您尚未在 getopen.php 开始会话。所以你不能检查isset( $_SESSION['login'] )
。所以你不初始化 $dbh
变量。
尝试将 session_start();
添加到 getopen.php
您已将 PDO 连接分配给 if 条件中的 $dbh 变量。然后您退出 if 并在其余代码中仍然使用 $dbh 变量。看起来很像您不满足 if 语句的条件,因此在尝试使用它之前从未分配 $dbh。
我正在尝试发出 AJAX 请求,但无法构建正确的 php 文件。 我在 php_error.log 中收到此类错误。相同的 php 代码在通常的 html 文件中工作正常。
PHP Notice: Undefined variable: dbh
PHP Fatal error: Call to a member function prepare()
包含 jQuery 像这样
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
AJAX:
$(function() {
$('.openbook').click(function() {
function testAjax(handleData) {
$.ajax({
url:'getopen.php',
success:function(data) {
handleData(data);
alert(data);
}
});
testAjax(函数(输出){ document.getElementById('#thiswindow').innerHTML = 输出; }); } } });
getopen.php:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<?php
if ( isset( $_SESSION['login'] ) ) {
$login = $_SESSION['login'];
$id=$_SESSION['id'];
$username="root";
$password="root";
$hostname = "localhost";
$dbname= "kotik";
function testdb_connect ($hostname, $username, $password) {
$dbh = new PDO("mysql:host=$hostname;dbname=kotik", $username, $password);
return $dbh;
}
try {
$dbh = testdb_connect ($hostname, $username, $password);
} catch(PDOException $e) {
echo $e->getMessage();
}
}
$title_select_query= $dbh -> prepare("SELECT title FROM books WHERE id = :id ORDER BY date DESC LIMIT 5,5 ");
$title_select_query ->execute(array(':id' => $id));
$title_select_query_result = $title_select_query->fetchColumn();
echo($title_select_query_result);
?>
</body>
</html>
这里有什么问题?我还尝试了 html+php 和 php 中的 getopen.php 结构。你能解释一下有什么区别吗?
编辑 2:AJAX 输出
编辑:根据一些变化:
<?php
session_start();
if ( isset( $_SESSION['login'] ) ) {
$login = $_SESSION['login'];
$id=$_SESSION['id'];
$username="root";
$password="root";
$hostname = "localhost";
$dbname= "kotik";
function testdb_connect ($hostname, $username, $password){
$dbh = new PDO("mysql:host=$hostname;dbname=kotik", $username, $password);
return $dbh;
}
try {
$dbh = testdb_connect ($hostname, $username, $password);
} catch(PDOException $e) {
echo $e->getMessage();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<?php
$title_select_query= $dbh -> prepare("SELECT title FROM books WHERE id = :id ORDER BY date DESC LIMIT 5,5 ");
$title_select_query ->execute(array(':id' => $id));
$title_select_query_result = $title_select_query->fetchColumn();
echo($title_select_query_result);
?>
</body>
</html>
您尚未在 getopen.php 开始会话。所以你不能检查isset( $_SESSION['login'] )
。所以你不初始化 $dbh
变量。
尝试将 session_start();
添加到 getopen.php
您已将 PDO 连接分配给 if 条件中的 $dbh 变量。然后您退出 if 并在其余代码中仍然使用 $dbh 变量。看起来很像您不满足 if 语句的条件,因此在尝试使用它之前从未分配 $dbh。