在通过ajax发送数据时,数据会丢失

时间:2011-10-03 19:04:56

标签: php ajax memcached

我正在开发一个项目,我开发了一个关于travelagency的网站。事情变得越来越好,正在产生更多的流量。问题在于缓慢生成的pricetable。我和我的客户认为,由于可用的资金,memcache应该做到这一点。退出我开始时我已经用新的jQuery ajax代码重写了旧的ajax代码。今晚的其他一些帖子有点涉及这个话题。

现在我有以下代码显示某个月的价格:

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是一个大文件,执行许多查询,并在那里进行了大量的价格计算。这一切都导致HTML表格的价格。存储在data中的输出将注入div的innerHTML属性,在本例中为targetElement,因为它必须是可调整的。

我想,好吧..当我在data中输出正确的输出时,我只是用数据发起另一次对WriteCache.php的调用。然后,数据由$cache->set("my_key", $_POST["data"]);存储在内存缓存服务器中(使用标头并设置为过去以确保浏览器的“新”访问)。

现在来了一个棘手的部分......无论我尝试什么,我的缓存中只能得到4067个字符。我已经没有了我能想到的选择。这只是总产出的一小部分...... 加法alert data.length显示了我正在寻找的住宿价格,长度是98.858。

你有什么建议可能导致这种奇怪的行为吗?数据是否可以一点一点传递? Memcache有一个选项chunk_size,默认设置为8192(我想是字节?,documentation不告诉..)

非常感谢任何帮助!

干杯!

P.S。标签memcached必须是memcache但我不能选择那个选项..

更新 问题与memcache无关。出于某种原因,我的数据在重新发送时会发生变化。这导致无效的HTML,由于某种原因,它没有设置到缓存中并且没有显示在我的输出中(邮件给自己)但是当我将结果(使用成功:在第二次调用中)输出到另一个DIV时,我确实看到了'损坏'输出......

2 个答案:

答案 0 :(得分:1)

我已经明白了,虽然我整个晚上都花了...我的输出包含HTML实体。你已经猜到了。 HTML实体以&符号开头,同时也是由$_GET$_POST$_REQUEST检索的数据的分隔符字符。一个简单的escape(data)就可以了。感谢所有花时间去挖掘这个的人!

答案 1 :(得分:0)

您可以尝试在php.ini中设置MEMCACHE_COMPRESSED,或者在设置函数la Memcache::set($key, $var, MEMCACHE_COMPRESSED);中将其作为标志传递以压缩值。