我有一些意圖在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