[英]Symfony2 Controller,View and JavaScript
我正在Symfony2下執行一個項目。 我在同一控制器(歷史記錄,日歷)中有兩個動作,並且有兩個視圖。
我的歷史操作稱為日歷操作,默認值為本周。 然后,它呈現歷史視圖,而他本人也呈現日歷視圖。
第一個問題,它正常工作,但是在日歷HTML視圖之前,symfony添加了一個句子: HTTP/1.0 200 OK Cache-Control: no-cache Date: Wed, 30 Jan 2013 10:17:13 GMT
我如何刪除此句子?
之所以這樣做,是因為我得到了一些JavaScript鏈接,這些鏈接可以通過調用Calendar Controller(上周或下周有所不同)使日歷進入上周或下周,並在其div中打印新日歷。 這是可行的,但是我有一些奇怪的行為。 我已經將JavaScript代碼放在日歷視圖中。 第一次加載頁面時,JavaScript在代碼源中顯示並正常工作。 如果我按上一個或下個星期按鈕,則日歷控制器會向我返回日歷的新視圖,但沒有javascript。 我在Firebug中看不到JS。 但是(這是最奇怪的部分),JavaScript仍然可以工作(如果我按下按鈕,它將重新加載日歷div)。
這是我的一些代碼:
calendar.html.twig:
<script type="text/javascript">
$('.nextWeek').live('click', function () {
$.ajax({
url: 'prof_calendrier/{{ nextWeek }}',
success: function (html) {$('.calendrier').html(html);}
});
});
$('.lastWeek').live('click',function () {
$.ajax({
url: 'prof_calendrier/{{ lastWeek }}',
success: function (html) {$('.calendrier').html(html);}
});
});
</script>
<p>Week from {{datesWeek.0}} to {{datesWeek.6}}</p>
[...] display rest of informations
prof_calendrierAction(日歷操作):
public function prof_calendrierAction ($date) {
$erreur='';
$message='';
$session = $this->container->get('session');
[...] // lot of operations
return $this->render('CDUserBundle:Default:prof_calendrier.html.twig', array(
'next_cours' => $liste_prochains_cours,
'today' => date('D'),
'nextWeek' => $nextWeek,
'lastWeek' => $lastWeek,
'datesWeek' => $datesWeek
));
}
有人能幫助我嗎 ?*
編輯:為避免HTTP消息,我的歷史操作不再調用日歷操作。 我渲染了歷史,從歷史角度看,我得到了ajax init,他將檢查今天一周的日歷操作。 但是,當我使用上周或下周按鈕刷新JavaScript時,html會更改,但是JavaScript不會更新。 JavaScript是在日歷視圖中編寫的,因此為什么日歷操作返回的JS不會超過第一次。
Edit²:我做了幾次測試。 我的上一個/下一個星期的JavaScript按鈕在日歷視圖中。 就像在此視圖中編寫的所有JS行都被捕獲並緩存了一段時間一樣。 我的意思是我下周第一次按,這表明下周沒問題。 第二次,螢火蟲向我顯示了兩個ajax請求,一個請求用於同一周,另一個請求用於后一個。 就像是保留並緩存了第一行JavaScript行,然后在下周第二次按下時,它將調用舊行,然后調用新行...
您可以使用Symfony的響應組件從控制器發送特定的響應。 加
use Symfony\Component\HttpFoundation\Response;
然后構建您的“ html”變量響應並像這樣發送:
return new Response($return,200,array('Content-Type'=>'application/json'));
在這里,$ return是一個json實體。 200是響應的狀態碼,並且'Content-Type'=>'application / json'必須匹配$ return的類型。
這就是我處理Symfony2日歷的方式 ,並且工作正常。
編輯JS:您無法使用Twig通過Ajax更改JavaScript。 您應該在javascript中定義全局變量,然后根據需要使用它們。 當您處理ajax響應時,可以在JavaScript中訪問這些全局變量。 例如,您可以在樹枝上做:
<script>
var globalMonth = {{ month }}; // set up the starting month
...
然后,當ajax發送響應時,您更新globalMonth並將其用於下一個ajax調用。
奧爾本
我想我知道您的JS發生了什么。 當您收到ajax響應時,您可能會將新操作綁定到nextWeek鏈接上的click事件。 但是在添加該動作之前,您必須
$('#nextWeek').unbind();
為了擺脫以前的綁定事件。
代替$this->render()
,在第二個控制器中調用$this->renderView()
。
為了更好地使用Symfony,請使用控制器中的path或url函數生成url。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.