2012-02-27 69 views
5

EDITEDdatos de volver de views.py Django y el uso de AJAX para mostrar que

Estoy intentando utilizar jQuery/ajax para mostrar datos devueltos por un método de Django.

Tengo un botón html llamado keywordBtn. Entonces cuando se presiona, se llamará al método updateKeywordSubscribed.

sin embargo, mi objeto no lo devuelve django. ¿Hay algún problema con mi método?

Si tiene éxito, el nombre de la sección div "update" mostrará la lista de palabras en esa lista json.

lo que tengo en mi 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> 

lo que tengo en mi 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

acabo de Necesito entender cómo jquery lee esos datos de views.py El resto lo podré completar. –

Respuesta

12

estoy haciendo algo similar a lo que necesita en mi proyecto actual.

consigo este punto de vista código postal de la cual devuelve un resultado GeoJSON o nula

Mi Vista:

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

mi tipo MIME es application/json no application/javascript

mis URL:

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

El JS que realiza la llamada y maneja el resultado 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"); 
    } 
}); 

nota que si usted está haciendo la recuperación de JSON, si se establece el tipo de datos a 'json', debe ser ir a datos de acceso en función de su éxito como un nativo JS.

si es necesario depurar los datos que realmente se está recuperada por jQuery, hacer un

console.log(data);
y mirar en su consola dev w/i su navegador (Chrome/ff No sé si otros navegadores soportan esto)

+0

Guau Francisco, buena respuesta, ¿me pueden ayudar a ver la imagen en la que parte de la función de éxito es la información que se transmite desde las vistas? –

+0

¿son los datos variables? –

+0

en mi ejemplo mi función de éxito de ajax toma un solo param "data" que es la respuesta json. parece que su función de éxito Ajax lo llama respuesta. debe console.log para ver lo que está recibiendo. si tuviera que adivinar, algo está mal en tu vista y no está respondiendo bien json, por lo que tu función de éxito no sabe qué hacer con ella. –

Cuestiones relacionadas