【问题标题】:Using objects in Ajax calls PHP files在 Ajax 中使用对象调用 PHP 文件
【发布时间】:2010-02-07 05:49:32
【问题描述】:

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

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

【问题讨论】:

    标签: php ajax oop


    【解决方案1】:

    使用会话保存对象以供下一个页面加载。

    // 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 会话中 - 每个用户都可以拥有自己的购物车对象,该对象保存在每个页面上!

    【讨论】:

      【解决方案2】:

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

      有关详细信息,请参阅文档中的Object Serialization

      【讨论】:

        【解决方案3】:

        mm,你应该将$_SESSION["someobj"] = $myobj;保存在session中,并确保当你调用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
        

        【讨论】:

        • 你能说得更具体点吗?我如何创建一个对象,然后将其分配给会话变量。如何在我的 ajaxcall php 文件中访问对象的成员?
        • 嗯。我不确定我是否同意将<kbd> 标签用于非密钥相关问题:) 但仍然+1。
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          $myobject = new myobject();
          

          现在我想在其他地方使用这个对象,可能是在某个函数或类下,或者任何无法识别它的地方,所以我将使用 global 关键字将此对象设为全局,它将是那里也有:

          global $myobject;
          

          一旦你有了对象,你就可以把它放到会话中,然后在 Ajax 脚本文件中使用它。

          【讨论】:

            【解决方案6】:

            正如其他人所建议的,$_SESSION 是执行此操作的标准方法,事实上,这是发明会话解决的原因之一。其他选项,即序列化对象依赖于客户端来保存对象,然后将其原封不动地返回。根据对象中的数据,这不是一个好的解决方案,因为 a) 对象可能包含出于安全原因不应在客户端可用的信息,并且 b) 您必须在收到对象后对其进行验证。

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

            【讨论】:

              【解决方案7】:

              根据此处的大多数答案,指的是将对象存储在 $_SESSION 中,与整个对象相比,仅存储需要在 AJAX 中访问的单个属性是否更有效,还是无关紧要?

              例如

              $_SESSION['object'] = $object;
              

              对比

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

              我知道 OP 正在询问有关访问整个对象的问题,但我想我的问题与是否仅访问对象的某些属性有关,而无需访问类的方法来更改对象一次它在 AJAX 中。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-10-16
                • 2016-07-05
                • 1970-01-01
                • 1970-01-01
                • 2019-07-24
                • 2013-01-19
                • 2014-06-26
                • 1970-01-01
                相关资源
                最近更新 更多