2012-02-27 111 views
5

EDITED獲取數據從Django的views.py回來,用ajax顯示它

我試圖使用jquery/Ajax來顯示數據從一個Django方法返回。

我有一個名爲keywordBtn的html按鈕。所以當它被按下時,updateKeywordSubscribed方法將被調用。

但是,我的對象並沒有被django返回。我的方法有問題嗎?

如果成功,div部分名稱「update」將顯示該json列表中的單詞列表。

什麼,我有我的html:

<script type="text/javascript"> 
     $(document).ready(function() { 
      $("#keywordBtn").click(function(e) { 
       updateKeywordSubscribed(e, "#keywords"); 
      }); 
     }); 
     function updateKeywordSubscribed(e, keywords) { 
      e.preventDefault(); 
      var option_form = jQuery(e.target); 
      $.ajax({ 
       url : option_form.attr('action'), 
       type : option_form.attr('method'), 
       data : option_form.serialize(), 
       dataType : 'json', 
       success : function(response) { alert ('sometext')}) 
     } 
</script> 

什麼,我有我的views.py:

def keyword_subscribe(request): 
    if 'keyword_input' in request.POST: 
    if 'name_input' in request.POST: 
     xhr = request.GET.has_key('xhr') 
     response_dict = {} 
      new_keyword = request.POST['keyword_input'] 
     username = request.POST['name_input'] 
     response_dict.update({'keyword_input': new_keyword, 'name_input': username}) 
     power_keyword = subscribe_keyword(username,keywords) 
     if power_keyword: 
      response_dict.update({'success':True}) 
     else: 
      response_dict.update({'errors':{}}) 
      if not username: 
         response_dict['errors'].update({'name_input': 'User ID is required'}) 
       if not total and total is not False: 
         response_dict['errors'].update({'keyword_input': 'Keyword field is blank'}) 
     if xhr: 
       return HttpResponse(simplejson.dumps(response_dict), mimetype='application/javascript') 
      return render_to_response('r2/userprofile_list.html', response_dict) 
+0

我需要了解jquery如何從views.py中讀取數據。其餘的我可以填寫它。 – 2012-02-27 13:13:15

回答

12

我在做類似你在我的當前項目所需要的東西。

我得到它返回一個GeoJSON的結果或null,則此郵政編碼觀點

筆者認爲:

def get_zipcode(request, latitude, longitude): 
    # Point on a map 
    point = GEOSGeometry('POINT(%s %s)' % (longitude, latitude)) 

    try : 
     zipcodes = Zipcode.objects.filter(mpoly__contains=point) 
     return HttpResponse(zipcodes[0].mpoly.geojson, mimetype="application/json") 
    except : 
     return HttpResponse(json.dumps(None), mimetype="application/json") 

我的MIME類型是application/JSON不是應用/ JavaScript的

我的網址:

url(r'^collision/zipcode/(?P<latitude>(\-|)\d+\.\d+)/(?P<longitude>(\-|)\d+\.\d+)/', 'core.views.get_zipcode', name='collision-zipcode'), 

使調用和處理json結果的JS結果

$.ajax({ 
    url : '/collision/zipcode/' + latitude + '/' + longitude + '/', 
    dataType : 'json', 
    type : 'GET', 
    success: function(data) 
    { 
     var paths = coord_to_paths(data.coordinates); 
     var polygon = new google.maps.Polygon({ 
      paths : paths, 
      strokeColor : "#FF7800", 
      strokeOpacity : 1, 
      strokeWeight : 2, 
      fillColor : "#FF7800", 
      fillOpacity : 0.6 
     }); 

     polygon.setMap(map); 

     console.log("adding zipcode polygon"); 
    } 
}); 

請注意,如果你正在做檢索JSON,如果你設置的數據類型爲「JSON」,你應該去訪問數據,您的成功起到一個JS本地人。

,如果你需要調試實際上是由於jQuery的檢索什麼數據,做一個

console.log(data);
,只是看在你的開發者控制檯瓦特/我您的瀏覽器(Chrome/FF我不知道是否有其他瀏覽器都支持這一點)

+0

Wow Francis,很好的答案,你能幫我看看成功函數的哪個部分是從視圖中傳入數據的圖片嗎? – 2012-02-27 13:27:21

+0

是可變數據嗎? – 2012-02-27 13:27:29

+0

在我的例子中,我的ajax成功函數接受一個單參數「data」,這是json響應。它看起來像你的ajax成功函數調用它的響應。你應該console.log它看看你正在得到什麼。如果我不得不猜測,在你的視圖中有什麼錯誤,並且它沒有返回好的json,所以你的成功函數不知道如何處理它。 – 2012-02-27 13:29:40

相關問題