2011-12-30 23 views
6

Tengo la siguiente llamada AJAX para actualizar un campo particular de un modeloAjax llamada fracasar en Django

$("#updateLink").click(function(){ 
    var dec_text = $('#desc_text').val(); 

    $.ajax({ 
     type: "POST", 
     url:"https://stackoverflow.com/users/update_desc/", 
     data: { 
     'val': dec_text, 
     }, 
     success: function(){ 
      $(".display, .edit").toggle(); 
      $("#descText").html(dec_text); 
     }, 
     error: function(){ 
      alert("Error"); 
     }, 
    }); 
    return false; 
}); 

y mi opinión es esta

@csrf_exempt 
def update_desc(request): 
    if request.is_ajax(): 
     if request.method == 'POST': 
      desc_text = request.POST.get('val', False) 
      if desc_text: 
       profile = user.profile 
       profile.desc = desc_text 
       profile.save() 

      return_message = "Sent mail" 
      return HttpResponse(return_message,mimetype='application/javascript') 

constantemente estoy recibiendo un mensaje de error y yo no sé cómo resolver esto. Incluso usé el decorador csrf_exempt para solucionar el problema si el problema fue causado por la falta de csrf token, pero el problema persiste.

Excepto uno ajax post que en mi plantilla base todas las llamadas ajax están fallando. ¿Alguien puede ayudarme a entender lo que está sucediendo aquí? Puedo dar algunos detalles más si es necesario.

Editar:

He añadido un archivo de la js que contiene este https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax en mi plantilla base, lo que significa que está presente en todas mis plantillas. Y estoy usando la versión de django 1.3.

+0

Espero que sigas recibiendo el csrf_token faltando el error. Si es así, mi respuesta se publica a continuación, indique el error después de que se lo utilice csrf_exempt. –

+0

En realidad, no sé cómo obtener el error, ya que puedes ver que acabo de poner una alerta en mi devolución de llamada de 'error' que me dice que mi llamada ajax falló pero no me dice cuál fue el error. ¿Cómo puedo obtener el error? – Sachin

+0

En primer lugar, en su archivo settings.py DEBUG = True. Esto no mostraría sus errores ajax pero definitivamente otros que no son atendidos. –

Respuesta

6

En primer lugar, está utilizando POST y no está enviando un token csrf. Intente enviar explícitamente el token csrf en lugar de usar el decorador csrf_exempt.
Una forma de hacerlo es con lo que he hecho en datos. Eso es para obtener el token csrf (o de su propio método) y pasarlo en sus argumentos.

$.ajax({ 
     url : url, 
     type: "POST", 
     data : {csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value}, 
     dataType : "json", 
     success: function(data){ 
      // do something 
     } 
    }); 
+0

Ahora no está pasando nada, solo veo un # al final de la URL significa que 'return false' no se ejecutó en el controlador de eventos – Sachin

+0

Siga los pasos detallados en los comentarios anteriores. –