Python / AJAX / JavaScript — печать HTML-страницы дважды во время GET

#javascript #python #ajax #cgi

#javascript #python #ajax #cgi

Вопрос:

В настоящее время у меня проблема с моей программой, в которой я пытаюсь выполнить поиск в реальном времени (очень похожий на Google) с использованием AJAX. На данный момент она основана на списке городов, поэтому, когда пользователь вводит, например, «A» в форме, он покажет список всех городов, которые начинаются с «A». Если пользователь продолжит вводить, например «Al», будет показан список всех городов, которые начинаются с «Al» и так далее, и тому подобное.

Проблема, с которой я сталкиваюсь, как следует из названия, заключается в том, что если я отступлю (удалю) текст в форме, мой скрипт python отправит ответ для повторной печати HTML-страницы, таким образом, имея две копии формы.

Ниже приведены некоторые ссылки на изображения того, что я имею в виду

Второй поиск:

http://img694.imageshack.us/img694/1972/city3f.jpg

Дублирующая страница:

http://img819.imageshack.us/img819/5808/city4p.jpg

Ниже приведен мой код:

python:

 city = list()

if form.has_key('q'):       
    if len(form['q'].value) > 0:
        for item in city_names: # city_names is a list of cities
            if item.startswith(form['q'].value):
                if not city:
                    city.append(item)
                else:
                    city.append(item)

        print "Content-Type: text/htmln"
        print city

else:
    print "Content-Type: text/htmln"
    print template #html
  

AJAX:

 function showCity(string)
{
    var xmlhttp;

    if (window.XMLHttpRequest){ // Code for IE7 , Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }else{ // Code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 amp;amp; xmlhttp.status==200){
            document.getElementById("City").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET", "/cgi-bin/suggestions.py?q=" string, true);
    xmlhttp.send();
}
  

Пожалуйста, помогите

Ответ №1:

Как настроены ваши события?

На изображении http://img819.imageshack.us/img819/5808/city4p.jpg , Я вижу, что он вызывается с помощью q= и нет строки для следования, поэтому showCity вызывается с пустой строкой. Это заставляет ваш скрипт идти по пути шаблона печати.

Не могли бы вы, пожалуйста, показать код, где showCity вызывается?

Добавлено

Используйте onkeypress . Судя по быстрому тестированию, это, похоже, вообще не регистрирует backspace. Кроме этого вам нужно отфильтровать пробел или, по крайней мере, проверить, содержит ли строка содержимое.

Комментарии:

1. функция showCity находится в моем html-коде, <тип ввода =»текст» onkeyup=»showCity(this.value)»></submit>