我有一些意图在ajax请求中使用的操作。Symfony 1.4:如何获得使用ajax请求的缓存?
如果我在浏览器中查看页面,则响应会被缓存,因为它应该是。但是,在Ajax请求它不是。
请求方法是GET,没有GET参数。
sfViewCacheManager甚至不叫isXMLHttpRequest(),所以它是相当混乱的,为什么这是不工作...
是否有设置某处使缓存Ajax请求?
我有一些意图在ajax请求中使用的操作。Symfony 1.4:如何获得使用ajax请求的缓存?
如果我在浏览器中查看页面,则响应会被缓存,因为它应该是。但是,在Ajax请求它不是。
请求方法是GET,没有GET参数。
sfViewCacheManager甚至不叫isXMLHttpRequest(),所以它是相当混乱的,为什么这是不工作...
是否有设置某处使缓存Ajax请求?
这不是100%的理想,但我想出了一个解决方案。看起来,只有在使用模板时,缓存才能工作。我通过return $this->responseText($json);
回复。
通过最小的PHP模板响应得到缓存运行。
#jsonSuccess.php
<?php echo $json ?>
如果有一种方法可以让responseText触发缓存机制,因为它会比运行模板稍微快一点。
有趣的是,缓存现在甚至可以在使用GET查询参数的情况下工作。我认为这可能是他们在Symfony 1.3/1.4中启用的。
为了说明正在缓存的内容,我在调试模式下查看时为响应添加了“created_at”头。
当POST
或GET
或其他HTTP头与页面一起发送时,Symfony始终禁用缓存。
因此,您的AJAX查询未被缓存,因为您正在向要缓存的页面发送GET
参数。
测试的最佳方法是:如您所说,在浏览器中添加GET
参数和查看页面,您将看到Cache无法工作。
因此禁用POST
和GET
或其他Header PUT DEL从Ajax调用和缓存将正常工作。
要禁用Get
/Post
:http://www.panteo.net/article/en/1/developpement-symfony-php/cache-symfony-and-appels-ajax.html
以下的伎俩,我缓存jQuery的自动完成响应时:
从jQuery脚本中删除另外的时间戳参数
取代:
var extraParams = {
timestamp: +new Date()
};
由:
var extraParams = {};
启用cache.yml缓存,搭配布局。没有布局,似乎没有什么工作:
loginFacility:
enabled: true
with_layout: true
lifetime: 86400
删除的动作附注头,因为这是自动设置为“无缓存”:
$this->getResponse()->setHttpHeader("Pragma", "");
我的行动现在看起来是这样的:
public function executeLoginFacility(sfWebRequest $request)
{
$this->getResponse()->setContentType('application/json');
$this->getResponse()->setHttpHeader("Pragma", "");
$facilities = Doctrine_Core::getTable('Facility')->findLoginFacilitiesForAutocomplete(
$request->getParameter('q'),
$limit);
return $this->renderText(json_encode($facilities));
}
现在,做了很多的时候自动完成,响应由Symfony的缓存和Firefox是retri将它们从它自己的缓存中移出。至少,它在Firebug中看起来如何。
我发现将模板添加到混合中而不是从操作返回strait只会导致Symfony缓存中的较大缓存文件。我看不到任何好处。
你怎么知道ajax响应没有被缓存?你确定这个请求是用GET方法调用的吗? – 2011-03-10 17:34:48
你是否确定它没有GET参数?一些JS库会帮助你为你添加一个cache-busting参数,即使你没有为它们指定参数。我们可以看看你的代码吗?另外,例如, Firebug,告诉你关于请求和响应头文件? – 2011-03-10 21:40:54
在您的操作的缓存配置中,尝试将with_layout指令更改为false。我不确定,但如何Ajax响应没有布局,这可能是一个问题。 看这个:http://www.symfony-project.org/jobeet/1_4/Doctrine/en/21#chapter_21_action_cache – Curlas 2011-03-11 11:09:05