2012-02-06 7 views
6

Sto riscontrando alcuni problemi nel funzionamento della comunicazione AJAX utilizzando il framework Bottle. Questa è la mia prima volta che uso AJAX, quindi è probabile che ho solo le basi sbagliate. Speriamo che un guru Bottle/AJAX possa indirizzare questo novizio nella giusta direzione. Ecco il codice che sto usando:Modulo di invio AJAX utilizzando 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

Sto testando su Chrome, quindi non è necessario utilizzare codice specifico IE, nel caso in cui qualcuno ci pensi. – patrickn

risposta

4

Ci sono alcuni problemi qui.

  1. Javascript è case sensitive. XMLHTTPRequest deve essere XMLHttpRequest. Avresti dovuto vedere un errore su questo nella tua console Javascript.
  2. onReadyStateChange deve essere onreadystatechange.
  3. Se si risolvono i due problemi precedenti, la chiamata AJAX funzionerà, ma si otterrà sempre solo il messaggio 'Non hai digitato nulla'. risposta. Questo perché stai usando GET. È necessario modificare il codice in modo che i valori del modulo vengano pubblicati utilizzando il metodo POST.

Inoltre, perché non stai usando jQuery per fare AJAX? Ti renderebbe la vita molto più facile. :)

+0

Grazie, sapevo che sarebbe stato qualcosa di semplice. Per non usare jQuery - sono irritato dalla "magia" in questa fase della mia carriera di codifica, e ho davvero bisogno di vedere come stanno le cose prima che mi sia comodo andare avanti. Da qui il mio uso di Bottle (ancora molto magico qui, ma minimo). – patrickn

+1

Questa è una buona ragione per non usare jQuery (e Django). Buona fortuna per il tuo progetto Bottle. È una struttura divertente con cui lavorare. – Alex