[英]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);
}
});
}
我正在imageprocessor.php上嘗試這個require_once:
require_once("db_connect.php");
它也位於include目錄中,並且可以正常工作:我只是在另一個頁面上使用它來運行一個效果很好的插入。 但是當我嘗試運行時:
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());
}
}
稍后在imageprocessor.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__)
(通過AJAX請求回顯)在imageprocessor.php上返回“ include”。
我試過在require_once中使用絕對URL和根路徑,但是隨后它既不會出錯也不會繼續使用imageprocessor.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
對象作為參數傳遞給函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.