Форма представления AJAX с использованием Bottle (Python) - PullRequest
6 голосов
/ 06 февраля 2012

У меня возникли проблемы с установкой связи AJAX с использованием среды Bottle.Я впервые использую AJAX, поэтому, скорее всего, я неправильно понял основы.Надеюсь, гуру бутылок / AJAX сможет направить этого новичка в правильном направлении.Вот код, который я использую:

#!/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')

1 Ответ

4 голосов
/ 07 февраля 2012

Здесь есть несколько проблем.

  1. Javascript чувствителен к регистру. XMLHTTPRequest должно быть XMLHttpRequest .Вы должны были видеть ошибку об этом в своей консоли Javascript.
  2. onReadyStateChange должно быть onreadystatechange .
  3. Если вы исправите две вышеуказанные проблемы, ваш AJAX-вызов будет работать, но вы всегда получите «Вы ничего не печатали».ответ.Это потому, что вы используете GET.Вам нужно изменить свой код, чтобы значения форм публиковались с использованием метода POST.

Кроме того, почему вы не используете jQuery для выполнения AJAX?Это сделало бы вашу жизнь намного проще.:)

...