Python / AJAX / JavaScript - HTML 页面在 GET 时重复打印两次
我现在在我的程序中遇到一个问题,我想用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/html\n"
print city
else:
print "Content-Type: text/html\n"
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 && xmlhttp.status==200){
document.getElementById("City").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET", "/cgi-bin/suggestions.py?q="+string, true);
xmlhttp.send();
}
请帮帮我。
1 个回答
0
你的事件是怎么设置的?
在这张图片中 http://img819.imageshack.us/img819/5808/city4p.jpg,我看到它是用 q=
调用的,但后面没有跟任何字符串,所以 showCity
是用一个空字符串来调用的。这就导致你的脚本走到了打印模板的路径。
你能把 showCity
被调用的代码给我看看吗?
补充说明
使用 onkeypress
。我做了个简单的测试,发现这个似乎根本没有注册到退格键。除此之外,你还需要过滤掉退格键,或者至少检查一下字符串是否有内容。