【问题标题】:PHP make object available globally for ajaxPHP 使对象全局可用于 ajax
【发布时间】:2011-12-19 15:07:01
【问题描述】:

我相信这可能是this question 的重复,但我不太明白答案

我想在我的脚本/页面的开头创建一个新对象。该页面有多个步骤,我想为每个步骤使用带有单独 PHP 文件的 Ajax。但其中一些步骤需要对对象进行修改。

这样做的正确方法是什么。我正在使用 JQuery Ajax。

它基本上是一个结帐页面,但后期阶段是根据所选选项生成的。

【问题讨论】:

    标签: php jquery ajax object


    【解决方案1】:

    您想要做的是保持数据可通过多个连接访问 - 持久化数据。在 PHP 中真的很简单,只需使用会话即可。

    首先,如果您想访问持久性数据(或存储任何数据),您需要启动一个会话。这样做:

    session_start();
    

    从那时起,您添加的任何内容都将被存储(除了一些例外情况 - 例如,存储 MySQL 连接可能不会很好地工作)。不过不用担心 - 数据只会为用户保留。例如,其他人将无法访问其他人的购物车或表单中的进度。

    以下是针对会话存储数据的方式:

    $obj = new MrClass();
    $_SESSION['form_object'] = $obj;
    

    稍后,像往常一样访问它:

    $_SESSION['form_object']->someMethod();
    

    但请记住:每个 AJAX 请求都必须以 session_start() 开头。

    【讨论】:

    • 我从来没有说过你必须明确地序列化它,但是当你把它放到会话中时,这就是正在发生的事情。如果你有一个 PDO 连接作为类成员,那么尝试隐式序列化它(即 $_SESSION['x'] = $ojb)将不起作用。您必须取消连接,或覆盖 __sleep (us.php.net/manual/en/language.oop5.magic.php)。
    【解决方案2】:

    如果您需要数据在多个请求中保持不变,您应该使用会话或 cookie。

    【讨论】:

    • 所以从我链接到这个的原始问题中完成的是 $_SESSION['my_object'] = serialize($my_object);
    • @MattP:您不需要使用序列化,请参阅我的答案作为示例。
    • 使用序列化会缩小你插入会话的对象的大小。
    【解决方案3】:

    您可以让对象代表一个数据库表。如果它是一个用户对象,请创建您的用户表,并通过 JSON 请求使用 ID 加载该对象来修改该对象。从本质上讲,每当您发出 AJAX 请求时都将其取消冻结,然后对其进行修改,然后将其放回数据库中。

    或者,您可以将其粘贴到$_SESSION,但请记住,您的对象必须能够完全序列化自己。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多