2

似乎 $.ajax (jQuery) 不适用于 PHP Singleton。

我有一个这样定义的简单类:

class MySingleton
{
    protected static $instance = null;
    private $array;
    protected function __construct()
    {
       ...
       $this->array = array();
       //get something from database, 
       $this->array[] = object from database;
       $this->array[] = object from database;
       ...
    }
    protected function __clone()
    {
    }

    public static function getInstance()
    {
        if (!isset(static::$instance)) {
            static::$instance = new static;
        }
        return static::$instance;
    }

    public function someFunction() {
         $this->array[0]->someField = "set something without saving it to database";
         ...
    }
}

我还有一个 helper.php 文件,它可以获取单例对象然后做一些事情。IE:

<?php
require "MySingleton.php";
$singleton = MySingleton::getInstance();
$singleton->someFunction();
$singleton->someOtherFunction();
?>

在我的 index.php 中,我尝试使用 $.ajax 为我做一些事情:

$.each(data, function(key, value) {

            $.ajax({
                url: 'helper.php',
                type: 'POST',
                data: someData,
                dataType: 'JSON'
            }).always(function(result) {

                ...

            });

});//each

正如您在我的 jQuery 代码中看到的那样,我已经调用了几次 $.ajax。

我跟踪了 MySingleton,并没有返回相同的实例,而是创建了几次(取决于 $.each 循环大小)。

我读过一篇文章: http ://www.daniweb.com/web-development/php/threads/393405/php-singletone-pattern-in-php-files-where-ajaxs-requests-are-sent

发生这种情况是因为单例模式仅在同一请求期间有效。在我的情况下,我有一些 ajax 请求(同样,基于 $.each 循环),这就是为什么它从来没有工作过。

我使用单例对象的原因是因为我不想建立多个数据库连接,而且 MySingleton 将有一个数组(将用于存储一些对象)并且在 MySingleton 类中我将使用该数组来临时存储一些信息而不将其保存回数据库)

那么有什么办法可以解决我的问题吗?我真的很想使用 $.ajax 和 PHP Singleton。

4

1 回答 1

1

在请求之间保存数据的唯一方法是将其存储在某个地方。这基本上意味着会话或文件或数据库中。

我不认为一次加载所有数据比只加载一条记录要慢,因为如果这个加载时间是创建请求、创建数据库连接等,那么 90%。那么你如何尝试一次加载所有数据,如果它太慢了,您可以在其上添加缓存或其他东西,但我很确定它会足够快。

于 2013-08-07T17:07:35.470 回答