2012-02-06 13 views
6

Tengo algunos problemas para que funcione la comunicación AJAX utilizando el marco de Bottle. Esta es la primera vez que uso AJAX, por lo que es probable que tenga los conceptos básicos equivocados. Con suerte, un gurú de Bottle/AJAX puede señalar a este novato en la dirección correcta. Aquí está el código que estoy usando:Formulario de envío de AJAX usando Bottle (Python)

#!/usr/bin/env python 

from bottle import route, request, run, get 


# Form constructor route 

@route('/form') 
def construct_form(): 
    return ''' 

<html> 
<head> 
<script type="text/javascript"> 

    function loadXMLDoc() 
    { 
     xmlhttp = new XMLHTTPRequest(); 
     xmlhttp.onReadyStateChange = function() 
     { 
      if(xmlhttp.readyState == 4 && xmlhttp.status == 200) 
      { 
       document.getElementById("responseDiv").innerHTML = xmlhttp.responseText; 
      } 
     } 

    xmlhttp.open("GET", "/ajax", true); 
    xmlhttp.send(); 
    } 

</script> 
</head> 

<body> 

    <form> 
     <input name="username" type="text"/> 
     <input type="button" value="Submit" onclick="loadXMLDoc()"/> 
    </form> 
    <div id="responseDiv">Change this text to what you type in the box above.</div> 

</body> 
</html> 

    ''' 

# Server response generator 

@route('/ajax', method='GET') 
def ajaxtest(): 
    inputname = request.forms.username 
    if inputname: 
     return 'You typed %s.' % (inputname) 
    return "You didn't type anything." 

run(host = 'localhost', port = '8080') 
+0

Estoy probando en Chrome, por lo que no es necesario usar el código específico de IE, en caso de que alguien lo piense. – patrickn

Respuesta

4

Hay algunos problemas aquí.

  1. Javascript distingue entre mayúsculas y minúsculas. XMLHTTPRequest debe ser XMLHttpRequest. Deberías haber visto un error sobre esto en tu consola de Javascript.
  2. onReadyStateChange debe ser onreadystatechange.
  3. Si soluciona los dos problemas anteriores, su llamada AJAX funcionará, pero solo obtendrá el mensaje 'No escribió nada'. respuesta. Esto es porque estás usando GET. Necesita cambiar su código para que los valores de los formularios se publiquen utilizando el método POST.

Además, ¿por qué no usa jQuery para hacer AJAX? Haría tu vida mucho más fácil. :)

+0

Gracias, sabía que iba a ser algo simple. En cuanto a no usar jQuery, estoy irritado por la "magia" en esta etapa de mi carrera de codificación, y realmente necesito ver cómo funcionan las cosas antes de que me sienta cómodo para seguir adelante. De ahí mi uso de Bottle (todavía hay mucha magia aquí, pero mínima) también. – patrickn

+1

Esa es una buena razón para no usar jQuery (y Django). Buena suerte en tu proyecto de botella. Es un marco divertido para trabajar. – Alex

Cuestiones relacionadas