Кажется, что $ .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 файл, который получит то единичный объект, сделать что-то. то есть:
<?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.
Правильно, каждый раз, когда вы запускаете скрипт PHP, вы начинаете с нуля. Один прогон не имеет доступа к контексту предыдущего запуска, если вы его где-то не сохранили. Вы могли бы это сделать или, возможно, подумали об использовании '.each()', чтобы создать один POST, который выполняет все запросы БД за один проход? – GreatBigBore
Похоже, что ваш синглтон слегка выключен: http://stackoverflow.com/a/203359/16959, но, честно говоря, я не знаю достаточно, чтобы понять, какая часть вызывает вашу проблему. возможно, «новый статический»? –
Причина, по которой я использую несколько $ .ajax вместо одной большой POST, я хотел бы вернуть результат с серверной части и немедленно отобразить их. каждый $ .ajax может занять до нескольких секунд, поэтому, если я использую один большой POST, для отображения всех выходов на главный экран индекса может потребоваться довольно много времени (более 10 секунд). – Josh