1

djangoのアプリのindex.htmlページはjqueryfullcalendarを使用しており、このビューが呼び出され、現在の月のすべての日のイベントを含む配列をダンプするためindex()に使用されます。このメソッドはテンプレートをレンダリングします。simplejsonindex.html

ajax getカレンダーをクリックすると、prev button別のdjangoビューが呼び出されますprev_month()。このメソッドは、前月のイベント配列を計算してダンプし、最後に別のテンプレートをレンダリングします。'prev_month.html'

def prev_month(request,year,month):
    ....
    prev_events=[]
    #populates array by making db calls
    return render_to_response('prev_month.html',{'prev_events':prev_events})

prev_month.html

...
<script>
    $(document).ready(function() {
        $('#calendar').fullCalendar({
       events: {{prev_events|safe}}
    });
        $('.fc-button-prev').click(function(){
          var d=$('#calendar').fullCalendar('getDate');
          var month=d.getMonth()+1;
          var year=d.getFullYear();
          $.ajax({url:'/myapp/prev_month/'+year+'/'+month,type:"GET",
  success:function(){
                    alert('prev_month.html::success');
},
});
});
</script>

テンプレートindex.htmlは、成功アラートが表示されることを除いて、上記のテンプレートと似ています。また、という名前のdjangoビューによって渡されたもの'index.html::success'を使用してカレンダーにデータを入力します。current_eventsindex()

ジャンゴビューは

def index(request):
   ...
   #creates events array and jsondump
   return render_to_response('index.html',{'current_events':events_array})

インデックスページに移動すると、カレンダーに当月のすべてのイベントが表示されます。prevボタンをクリックすると、djangoビューprev_month()が実行されます。しかし、何らかの理由で、レンダリングされたテンプレートはではindex.htmlなくですprev_month.html 。これは、表示される成功アラート index.html::success

それ以外の prev_month.html::success

このため、前月のイベントは表示されません。

誰かが私がこれが起こる理由を理解するのを手伝ってもらえますか?

4

1 に答える 1

1

AJAX 呼び出しからの応答は使用されません。

$.ajax()success 関数が実際にデータ (つまり、Django サーバーからの応答) をバインドするように、呼び出しを変更する必要があります。$.get()この例では、読みやすくするために次のように使用しています。

$.get('/myapp/prev_month/'+year+'/'+month, function(data) {
  $('#calendar').fullCalendar({events: data});
});

http://api.jquery.com/jQuery.get/にある jQuery.get over のドキュメントを参照してください。

これはあなたのfullCalendar()メソッドを使用し、受け取っdataた を の新しい値として与える必要がありますevents

JavaScript エラー コンソールを見て、 の形式dataが問題を引き起こしているかどうかを確認してください。その場合は、結果を 内の JSON として返す必要がありますprev_month()

于 2012-04-13T12:35:01.903 に答える