好像$阿賈克斯(jQuery的)不與PHP辛格爾頓很好地工作。
我有這樣定義的簡單類:
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,我試圖用$就爲我做一件事:
$.each(data, function(key, value) {
$.ajax({
url: 'helper.php',
type: 'POST',
data: someData,
dataType: 'JSON'
}).always(function(result) {
...
});
});//each
,你可以在我的jQuery代碼看,我所說的$。阿賈克斯幾次。
我跟蹤MySingleton,而不是返回相同的實例,它創造了幾次(取決於$。每個環的大小)。
,這是因爲單例模式的相同的請求時纔會工作。在我的情況下,我有幾個Ajax請求(再次,基於$ .each循環),這就是爲什麼它從來沒有工作。
我使用單例對象的原因是因爲我不想進行多個數據庫連接,MySingleton也會有一個數組(這將用於存儲一些對象),並且在MySingleton類中我將使用陣臨時儲存而不保存到數據庫中的一些信息)
所以反正是有解決我的問題?我真的想要使用$ .ajax和PHP Singleton。
沒錯,每次運行PHP腳本時,都是從頭開始的。一次運行無法訪問上一次運行的上下文,除非將其保存在某處。你可以做到這一點,或者可以考慮使用'.each()'來構建一個單一的POST,一次完成所有的數據庫查詢。 – GreatBigBore
它看起來像你的單身稍微關閉:http://stackoverflow.com/a/203359/16959但說實話,我不知道什麼部分是造成你的問題。可能是'新靜態'? –
爲什麼我使用多個$ .ajax而不是一個大的POST是我想從服務器端得到結果並立即顯示它們。每個$ .ajax可能需要幾秒鐘,所以如果我使用一個大的POST,可能需要相當長的時間(超過10秒)才能將所有輸出顯示到索引主屏幕。 – Josh