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->newMethod()
仅在 $nextObj
是对象时才有效。但我们不能确定这一点,因为$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
对象作为参数传递给您的函数。
【讨论】:
以上是关于PHP:对 PHP 的 AJAX 请求的主要内容,如果未能解决你的问题,请参考以下文章
对 php 聊天应用程序过多的 mysql (ajax) 请求有啥负面影响?