2012-04-27 33 views
2

我最近開始學習jQuery,現在我正在玩弄.ajax()函數。如何訪問jQuery.ajax()在Django視圖中獲取參數

我不知道如何訪問Django中的get參數。

我的代碼如下所示:

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> 

Django的:

@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)) 

然後我試圖說明它在我的模板

{{ ajaxGet }} 

乙ut每次渲染爲'虛擬'

在firebug中,我可以看到具有正確的鍵和值的獲取請求。

我在這裏錯過了什麼?

感謝

+1

請張貼您的整個視圖代碼,以便社區可以更好地幫助您。 – Brandon 2012-04-27 14:30:28

+1

應該清楚的是,代碼沒有進入'if request.is_ajax()'塊,否則'ajaxGet'將會是'False'而不是該字符串。所以你需要弄清楚爲什麼。 – 2012-04-27 14:34:22

+0

是的,先生!但是,對於我作爲這個問題的初學者來說,這是非常令人困惑的,爲什麼它沒有進入is_ajax,當從我的pov這是一個Ajax請求。我更新了一些評論的描述 – marlboro 2012-04-27 15:12:35

回答

2

有一種常見的疑難雜症,人們常常會做這種阿賈克斯的時候進入,並沒有阻止鏈接/按鈕的默認操作。所以你的Ajax函數從來沒有機會觸發,並且你在Django代碼中看到的請求是由正常的頁面加載引起的 - 這就是爲什麼is_ajax()是錯誤的原因。

click處理函數一個參數event,並在函數結束時調用event.preventDefault();

+0

它在Opera中起作用!但它只呈現astream.html模板,而且我放入成功函數的任何內容都不會執行(我嘗試了一些簡單的提示('xyz')) – marlboro 2012-04-30 22:28:58

相關問題