PHP:对 PHP 的 AJAX 请求

Posted

技术标签:

【中文标题】PHP:对 PHP 的 AJAX 请求【英文标题】:PHP: AJAX request to PHP 【发布时间】:2013-11-13 08:46:15 【问题描述】:

所以我在从 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");

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

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__) 

在 imageprocessor.php 上(通过 AJAX 请求回显)返回“include”。

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

【问题讨论】:

你能转储$db的内容吗?如果在外部文件中定义变量,则必须使用 define() 函数引用它。 这对您有帮助吗? ***.com/questions/2531221/… 【参考方案1】:

希望你的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());
    

【讨论】:

啊。范围问题。晚了。谢谢,做到了。它现在在我的语句中返回一个语法错误,一切都很好! @Jeff net.tutsplus.com/tutorials/php/… 这是一个关于 PHP PDO 的不错的教程,希望对您有所帮助..【参考方案2】:

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

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

假设

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

在此代码中,$nextObj-&gt;newMethod() 仅在 $nextObj 是对象时才有效。但我们不能确定这一点,因为$obj-&gt;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 对象作为参数传递给您的函数。

【讨论】:

以上是关于PHP:对 PHP 的 AJAX 请求的主要内容,如果未能解决你的问题,请参考以下文章

PHP:对 XML 的 AJAX 请求

对 php 聊天应用程序过多的 mysql (ajax) 请求有啥负面影响?

使用 php 对 Mysql 的 Ajax JQuery 请求不适用于 JSON

AJAX请求登录页面上的PHP文件

php ajax请求判断

响应 PHP 中的 ajax 请求后如何继续处理?