2012-07-21 27 views
6

Tengo un formulario simple de presentación con ajax, pero me sigue dando un error. Todo el error dice que es "error". Sin código, sin descripcion No hay nada, cuando lo aviso cuando falla.Jquery ajax solicitud de publicación no funciona

Javascript con jQuery:

$(document).ready(function(){ 

     $(".post-input").submit(function(){ 
      var postcontent = $(".post-form").val(); 

      if (postcontent == ""){ 
       return false; 
      } 

      $(".post-form").attr("disabled", "disabled"); 

      $.ajax({ 
       url: '/post', 
       type: 'POST', 
       data: {"post-form": postcontent}, 
       dataType: json, 
       success: function(response, textStatus, jqXHR) { 
        alert("Yay!"); 
       }, 
       error: function(jqXHR, textStatus, errorThrown){ 
        alert(textStatus, errorThrown); 
       } 
      }); 
     }); 
    }); 

HTML:

<form class="post-input" action="" method="post" accept-charset="utf-8"> 
       <textarea class="post-form" name="post-form" rows="1" cols="10" onFocus="this.value='';return false;">What are you thinking about...</textarea> 
       <p><input class="post-submit" type="submit" name = "post.submitted" value="Post"></p> 
      </form> 

y si no hay problemas allí, entonces el lado del servidor (pirámide):

def post(request): 
    session = Session() 
    user = authenticated_userid(request) 
    postContent = request.POST['post-form'] 
    if not postContent == '': 
     session.add(Activity(user.user_id, 0, postContent, None, None)) 
     return {} 
    return HTTPNotFound() 

ACTUALIZACIÓN: Después de un poco más de depuración con Firebug, descubrí que el cuerpo de solicitud posterior contiene s only post.submitted = Post, en lugar del resultado esperado de {"post-form": postcontent}.

+0

¿Es un error de JavaScript (cliente), error del servidor o un error de python? – Hamish

+0

@Hamish a través de mi depuración, supongo que es un error del cliente. – Wiz

Respuesta

14

De acuerdo con la documentación jQuery, debe declarar el tipo de datos:

$.ajax({ 
    type: 'POST', 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType 
}); 

también, mirando a su código del lado del servidor, que no desea realmente para publicar datos JSON formato. Este {"post-form":postcontent} es datos formateados JSON. Lo que realmente quieres hacer es enviar TEXT o HTML. Aparentemente como datos de formulario, yo adivinaría en TEXTO.

Prueba esto:

$.ajax({ 
    url: '/post', 
    type: 'POST', 
    data: 'post-form='+postcontent, 
    dataType: 'text', 
    success: function(response, textStatus, jqXHR) { 
    alert("Yay!"); 
    }, 
    error: function(jqXHR, textStatus, errorThrown){ 
    alert(textStatus, errorThrown); 
    } 
}); 
+0

+1 Esto debería hacerlo – ShadowStorm

+1

lamentablemente, esto no funcionó, pero después de un poco más de depuración con firebug, descubrí que el cuerpo de la publicación es en realidad una publicación. submitted = Post, en lugar de la post-forma prevista = postcontenido. – Wiz

+0

¿De verdad quieres publicar JSON o simplemente datos de formularios regulares? – TheCarver

1

Creo que el problema es que los datos que está pasando no están escritos correctamente.

Try to change data: {"post-form": postcontent}, 
To: 
data: 'post-form='+ $('.post-form').val(), 
3

Desde envías JSON -datos que tiene que declarar el tipo de datos "JSON":

$.ajax({ 
    url: '/post', 
    type: 'POST', 
    dataType: "json", 
    data: {"post-form": postcontent}, 
    success: function(response, textStatus, jqXHR) { 
    alert("Yay!"); 
    }, 
    error: function(jqXHR, textStatus, errorThrown){ 
    alert(textStatus, errorThrown); 
    } 
Cuestiones relacionadas