2011-10-03 116 views
5

我正在開發一個項目,在該項目中爲旅行社開發了一個網站。事情變得越來越好,更多的流量正在產生。問題在於生成的需求緩慢。我和我的客戶認爲,由於可用的資金,memcache應該能夠做到。退出,因爲我開始我已經用新的jQuery ajax代碼重寫了舊的ajax代碼。今天晚上的其他一些帖子有點涵蓋了這個話題。在通過ajax發送數據時,數據會丟失

現在我有以下的代碼顯示了pricetable一定一個月:

function ShowPriceTable(targetElement, accommodationID, month) 
{ 
    $.ajax({ 
     type: "POST", 
     url: basePath + "/ajax/GetPriceTable.php", 
     data: "accommodationID="+accommodationID+"&month="+month, 
     success: function(data){ 
      $("#"+targetElement).html(data); 

      $.ajax({ 
       type: "POST", 
       url: basePath + "/ajax/WriteCache.php", 
       data: "accommodationID="+accommodationID+"&month="+month+"&data="+data, 
      }); 
     } 
    });   
} 

GetPriceTable.php是一個大文件,執行許多查詢和大量pricecalculation的是那裏進行。這一切都會產生一個包含價格的HTML表格。存儲在data中的輸出被注入div的innerHTML屬性,在這種情況下爲targetElement,因爲它必須是可調整的。

我想,呃..當我有正確的輸出在data我只是再次打電話給WriteCache.php與數據。數據然後通過$cache->set("my_key", $_POST["data"]);存儲在memcache服務器中(使用標題並設置爲過去以確保瀏覽器的「新」訪問)。

現在出現了棘手的部分...無論我嘗試什麼,我的緩存中只能得到正確的4067個字符。我已經用完了我能想到的選項。這只是總產量的一小部分... 加入alertdata.length顯示我在我尋找的住宿pricetable,長度是98.858。

你有什麼建議可能會導致這種奇怪的行爲?它可以是數據一點一點傳遞? Memcache有一個選項chunk_size,默認情況下它設置爲8192(字節我猜?,documentation do not告訴..)

任何幫助非常感謝!

乾杯!

P.s.標記memcached必須是memcache,但我不能選擇該選項。

更新 問題與memcache無關。出於某種原因,我的數據在被再次發送時發生了變化。這導致無效的HTML,由於某種原因,沒有設置到緩存中,並沒有顯示在我的輸出(郵件給我自己),但當我輸出結果(使用成功:在第二次調用)到另一個DIV時,我看到'mangled'輸出...

+0

上個月早些時候,collegue有一個類似的問題,他試圖通過$ .ajax發送超過1mb的數據到服務器,並且它保持失敗。他不得不上傳不到一百萬字節的數據塊,否則會崩潰而無法發送。也許你的錯誤在於類似的地方? –

+0

有關如何實施此類解決方案的任何想法? – Ben

+0

只是猜測,但嘗試 'data:「accommodationID =」+ accommodationID +「&month =」+ month +「&data =」+ data.serialize(),' – alykhalid

回答

1

我已經想通了,它花了我整個晚上,雖然...我的輸出包含HTML實體。你已經猜到了。 HTML實體以連字符開頭,同時是由$_GET,$_POST$_REQUEST檢索的數據的分隔符。一個簡單的escape(data)做到了。感謝所有花時間深入研究的人!

0

您可以嘗試在php.ini中設置MEMCACHE_COMPRESSED或將其作爲標記傳遞給set函數a la Memcache::set($key, $var, MEMCACHE_COMPRESSED);以壓縮該值。

+0

感謝您的回覆。在嘗試了很多事情之後,我總結出由於某種原因數據被改變了。所以,不管我想要設置什麼,結果都是有問題的。 – Ben

+0

很抱歉聽到它。祝你好運。 –