#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>