PHP: AJAX request to PHP


PHP: AJAX request to PHP

所以我在从

AJAX 请求调用的 PHP 页面上包含一个文件时遇到了问题:

$(document).ready(function() {
$("#image-status").html('Processing images...');
});
function process_images(files) {
$.ajax ({
    type: "POST",
    url: "includes/imageprocessor.php",
    data: {files: JSON.stringify(files)},
    success: function(data){  
        $("#image-status").html(data);
    }
});
}

我正在图像处理器上尝试这个require_once.php:

require_once("db_connect.php");

它也在包含目录中,并且可以工作:我只是在另一个页面上使用它来运行一个运行良好的插入。但是当我尝试运行时:

function get_files($id) {
$query = $db->prepare("SELECT * FROM files INNER JOIN file_profile_join ON files.id = file_profile_join.file_id WHERE file_profile_join.profile_id = " . $id . " GROUP BY files.id");
try {
    $query->execute();
    $rows = $query->fetch();
} catch (PDOException $e) {
    die($e->getMessage());
}
}

稍后在图像处理器.php中,它出错:

Fatal error: Call to a member function prepare() on a non-object in /home/yogabopvolume26/theprivatesector.org/epic/includes/imageprocessor.php on line 90

就像它首先不需要db_connect一样(这就是声明$db的地方)。但它也不会返回找不到db_connect.php的错误。

basename(__DIR__) 

在图像处理器上.php(通过 AJAX 请求回显)返回"include"。

我尝试在require_once中同时使用绝对 URL 和根路径,但随后它既没有出错也没有继续使用图像处理器.php:返回require_once后该文件没有回显。我也无法从session_start获取当前会话(我可以从原始页面 [profile.php] print_r _SESSION 美元,因此会话处于活动状态)。也许他们有关系?我不知道出了什么问题。

希望你的db_connect.php是链接:

try {
    $db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

如果您在外部将连接对象用于连接文件,则必须使用该global将该对象访问到您的特定文件中

据我所知,您收到此错误是因为您没有在文件imageprocessor.php中调用对象$db,请尝试以下操作:

function get_files($id) {
    global $db;
    $query = $db->prepare("SELECT * FROM files INNER JOIN file_profile_join ON files.id = file_profile_join.file_id WHERE file_profile_join.profile_id = " . $id . " GROUP BY files.id");
    try {
        $query->execute();
        $rows = $query->fetch();
    } catch (PDOException $e) {
        die($e->getMessage());
    }
}

在非对象上调用成员函数 someFunc()

......

当您想使用任何对象的 someFunc() 方法时,会发生这种类型的错误,但不幸的是您的对象不是对象。

假设

$obj = New SomeObj();
$nextObj = $obj->someMethod(); // << Suppoes someMethod() returns a object if successfull
$nextObj->newMethod();

在此代码中,仅当$nextObj是对象时,$nextObj->newMethod()才会起作用。但是我们不能确定这一点,因为$obj->someMethod();只有在成功时才返回一个对象,而不成功时返回其他对象。

防止这种情况的一个好方法是。

$nextObj = $obj->someMethod(); // << Suppoes someMethod() returns a object if successfull
if(is_object($nextObj)){
    $nextObj->newMethod();
} else {
    //Now you know that there is error while executing $obj->someMethod();
}

另一件事:由于您有一个函数function get_files($id).你自己可以看到$db变量不是在你的函数范围内定义的。所以,$db暂时什么都不包含。与其他答案一样,您应该使用 global $db 或者可以将 $db 对象作为参数传递给您的函数。