2011-10-03 112 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

很抱歉听到它。祝你好运。 –