2012-04-27 10 views
2

最近jQueryを学び始めましたが、今は.ajax()関数を使って遊んでいます。jQuery.ajax()へのアクセス方法Djangoビューのパラメータを取得する

私はDjangoのgetパラメータにアクセスする方法を理解できません。その後、私は私のテンプレートで

{{ ajaxGet }} 

それを表示しようとする

@https_off 
def index(request, template='index.html'): 

    request.session.set_test_cookie() 

    path=request.META.get('PATH_INFO') 
    defo=path[1:path[1:].find('/')+1] 
    request.session['defo']=defo 
    defo=request.session['defo'] 

    # build the stream sorted by -pub_date 
    import itertools 

    chained=itertools.chain(
     model1.objects.order_by('-pub_date').filter(), 
     model2.objects.order_by('-pub_date').filter(), 
    ) 

    stream=sorted(chained, key=lambda x: x.pub_date, reverse=True) 

    ajaxGet=request.GET.get('param','dummy') 

    if request.is_ajax(): 
     template='astream.html' 
     ajaxGet=request.GET.get('param',False) 

    renderParams={'defo':defo, 'stream':stream, 'ajaxGet':ajaxGet} 

    return render_to_response(template, renderParams, context_instance=RequestContext(request)) 

のjQuery & HTML::

<div id="browser"> 
    <ul> 

    {% comment %} 
     Theres a script for each ctg. Each script fades out #astream, fades in #stream_loading and then it should display #astream with new values based on the GET param in ajax call 
     Prolly it wont work, but first I need to interact with the GET param in my views.py 
    {% endcomment %} 

    {% for ctg in ctgs %} 
     <script type="text/javascript" charset="utf-8"> 
      (function($) { 
       $(document).ready(function() { 
        $("#stream_loading").hide() 

        $("#browse_{{ctg}}").click(function() { 

         $("#astream").fadeOut() 
         $("#stream_loading").fadeIn() 

         $.ajax({ 
          type: "GET", 
          url: "/{{defo}}/?param={{ctg}}", 
          success: function() { 
           $("#stream_loading").fadeOut() 

           $("#astream").fadeIn() 
          } 
         }); 
        }); 
       }); 
      })(jQuery); 
     </script> 
     <li><a id="browse_{{ctg}}" title="{{ctg}}">{{ctg}}</a></li> 
    {% endfor %} 
    </ul> 
</div> 
<div id="astream"> 
    {{ajaxGet}} #just to see whats rendered 
    {% include "astream.html" %} 
</div> 

<div id="stream_loading"> 
    loading stream, please wait ... 
</div> 

ジャンゴ

私のコードは次のようになりますB utは毎回「ダミー」としてレンダリングされます

私は適切なキーと値を持つget要求を見ることができます。

私はここで何が欠けていますか?

おかげ

+1

コミュニティがあなたをより良く助けるために、全体のビューコードを投稿してください。 – Brandon

+1

コードが 'if request.is_ajax()'ブロックに入っていないことは明らかです。そうでなければ 'ajaxGet'はその文字列ではなく' False'になります。だから、それはなぜそれを解決する必要があります。 –

+0

はいサー!しかし、この問題の初心者である私にとって、is_ajaxに入っていないのはなぜなのですか?私はいくつかのコメントで説明を更新しました – marlboro

答えて

2

あり、人々は多くの場合、アヤックスのこの種を行う際に陥る頻繁に落とし穴があり、それはリンク/ボタンのデフォルトのアクションを阻止されていません。だからあなたのAjax関数は決して起動する機会はなく、Djangoコードで見ているリクエストは通常​​のページロードによって引き起こされます。そのため、is_ajax()はfalseです。

ハンドラにパラメータeventを与え、関数の最後にevent.preventDefault();を呼び出します。

+0

Operaで動作します!しかし、それはちょうどastream.htmlテンプレートをレンダリングし、成功関数に入れたものは決して実行されません(私はいくつかの単純な警告( 'xyz')を入れてみました – marlboro

関連する問題