在Ajax中使用对象调用PHP文件

时间:2010-02-07 05:49:33

标签: php ajax oop

我在index.php文件中实例化了一个类。但后来我使用jQuery Ajax来调用一些PHP文件,但它们不能使用我在index.php文件中创建的对象。

我怎样才能让它发挥作用?因为我不想创建新对象,因为我创建的对象包含我想要使用的所有属性值。

7 个答案:

答案 0 :(得分:16)

使用会话保存对象以进行下一次加载。

// Create a new object
$object = new stdClass();
$object->value = 'something';
$object->other_value = 'something else';

// Start the session
session_start();

// Save the object in the user's session
$_SESSION['object'] = $object;

然后在从AJAX

加载的下一页中
// Start the session saved from last time
session_start();

// Get the object out
$object = $_SESSION['object'];

// Prints "something"
print $object->value;

通过使用PHP会话,您可以为特定用户在多个页面中保存数据。例如,每个用户可能都有一个购物车对象,其中包含他们想要购买的商品列表。由于您只在THAT USERS会话中存储该数据 - 每个用户都可以拥有自己的购物车对象,并保存在每个页面上!

答案 1 :(得分:3)

mm,您应该存储在会话$_SESSION["someobj"] = $myobj;中,并确保在调用Ajax PHP文件时,这包括必需的类文件,该文件定义了$myobj的类及其中包含的任何对象。

你可以更具体一点吗?我可以试试。

这是我创建对象然后将其分配给会话变量的方式:

include(whateverfilethathastheclassorincludeit.php)
$theObject = new TheObjectClass();
//do something with the object or not
$_SESSION['myobject'] = $theObject;

这是我在Ajax调用PHP文件中访问对象成员的方法:

include(whateverfilethathastheclassorincludeit.php)
$theObject = $_SESSION['myobject'];
//do something with the object

答案 2 :(得分:3)

如果您不想使用会话,另一个选项是serialize您的对象,并通过AJAX调用中的$ _POST值发送它。不是最优雅的方式,但如果你不想使用会话,这是一个很好的选择。

有关更多信息,请参阅文档中的Object Serialization

答案 3 :(得分:1)

你还没有提供代码,但我猜你需要让你的实例化对象全局化,以便其他脚本看到它,例如:

$myobject = new myobject();

现在我想在其他地方使用此对象,可能在某个功能或类或任何未被识别的地方使用此对象,因此我将使用全局关键字将其设为全局,并且它将是那里也有:

global $myobject;

获得对象后,可以将其放入会话中,然后在Ajax脚本文件中使用它。

答案 4 :(得分:1)

如果您不想移动index.php中的对象,请让您的ajax向index.php发出请求,但添加一些额外的参数(post / get),让您的index.php知道要处理它作为ajax请求而不返回正常的网页html输出。

答案 5 :(得分:0)

正如其他人所建议的那样,$_SESSION是实现它的标准方式,事实上,这也是发明要解决的会议的原因之一。其他选项,即序列化对象依赖于客户端来保持对象然后将其返回到未被篡改的状态。根据对象中的数据,它不是一个好的解决方案,因为a)对象可能包含出于安全原因在客户端不可用的信息,以及b)在收到对象后必须验证对象。 / p>

那就是说,如果您仍想在客户端使用该对象,那么JSON是一个序列化对象数据的选项,请参阅JSON functions in PHP

答案 6 :(得分:0)

基于这里的大多数答案,指的是将对象存储在$ _SESSION中,仅存储需要在AJAX中访问的各个属性而不是整个对象更有效,还是无关紧要?

E.g。

$_SESSION['object'] = $object;

vs

$_SESSION['property1'] = $object->property1;
$_SESSION['property2'] = $object->property2;

我知道OP正在询问访问整个对象,但我想我的问题是关于它是否只是访问对象的某些属性,而不需要访问类的方法来改变对象一次它在AJAX中。