2012-02-27 36 views
5

EDITEDBắt dữ liệu trở lại từ django views.py và sử dụng ajax để hiển thị nó

Tôi đang cố gắng sử dụng jquery/ajax để hiển thị dữ liệu trả về từ một phương pháp django.

Tôi có nút html có tên keywordBtn. Vì vậy, khi nó được nhấn, phương thức updateKeywordSubscribed sẽ được gọi.

tuy nhiên, đối tượng của tôi không được trả lại bởi django. Có gì sai với phương pháp của tôi không?

Nếu thành công, tên phần div "update" sẽ hiển thị danh sách các từ trong danh sách json đó.

những gì tôi có trong html của tôi:

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

những gì tôi có trong views.py tôi:

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

tôi chỉ cần hiểu cách jquery đọc dữ liệu đó từ views.py. Phần còn lại tôi sẽ có thể điền vào. –

Trả lời

12

tôi đang làm một cái gì đó tương tự như những gì bạn cần trong dự án hiện tại của tôi.

Tôi GET xem mã bưu điện này mà trả về một kết quả GeoJSON hoặc null

Xem của tôi:

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

Mimetype của tôi là application/json không application/javascript

url của tôi:

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

JS thực hiện cuộc gọi và xử lý kết quả json

$.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"); 
    } 
}); 

lưu ý rằng nếu bạn đang truy xuất json, nếu bạn đặt kiểu dữ liệu thành 'json', bạn nên truy cập dữ liệu trong hàm thành công dưới dạng bản gốc JS.

nếu bạn cần phải gỡ rối những dữ liệu nào thực sự được lấy ra bằng jquery, làm một

console.log(data);
và nhìn vào giao diện điều khiển dev của bạn w/i trình duyệt của bạn (chrome/ff Tôi không biết nếu các trình duyệt khác hỗ trợ này)

+0

Wow Francis, câu trả lời hay, bạn có thể giúp tôi xem hình ảnh trong đó một phần trong hàm thành công là dữ liệu được truyền vào từ các khung nhìn? –

+0

là dữ liệu biến? –

+0

trong ví dụ của tôi hàm thành công ajax của tôi lấy một tham số đơn "dữ liệu" là đáp ứng json. có vẻ như chức năng thành công ajax của bạn gọi nó là phản hồi. bạn nên console.log nó để xem những gì bạn đang nhận được. nếu tôi phải đoán, có điều gì đó không ổn trong quan điểm của bạn và nó không trả lại json tốt, vì vậy bạn thành công chức năng không biết phải làm gì với nó. –

Các vấn đề liên quan