簡體   English   中英

PHP:對PHP的AJAX請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM