我目前在我的程序中存在一个问题,我正在尝试使用AJAX进行实时搜索(很像Google)。目前,它基于城市列表,因此当用户在表单中键入例如“A”时,它将显示以“A”开头的所有城市的列表。如果用户继续输入,例如“Al”,它将显示以“Al”开头的所有城市的列表,依此类推。
正如标题所示,我所遇到的问题是,如果我退格(删除)表单中的文本,我的python脚本将发送一个响应再次打印HTML页面,因此有两个表单副本。
下面是我的意思的一些图像链接
第二次搜索:
http://img694.imageshack.us/img694/1972/city3f.jpg
重复页面
http://img819.imageshack.us/img819/5808/city4p.jpg
以下是我的代码:
蟒:
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();
}
请帮忙
答案 0 :(得分:0)
那是因为您将响应的内容类型指定为text / html,当浏览器收到此标题时,它会输出相同的页面两次。尝试将内容类型指定为text / plain或使用不同的输出格式(XML或JSON)
答案 1 :(得分:0)
您的活动如何设置?
在图片http://img819.imageshack.us/img819/5808/city4p.jpg中,我可以看到它是使用q=
调用的,并且没有要遵循的字符串,因此使用空字符串调用showCity
。这使您的脚本成为打印模板路径。
是否可以显示调用showCity
的代码?
加
使用onkeypress
。从快速测试来看,似乎根本没有注册退格。除此之外,您需要过滤退格键或至少检查字符串是否包含内容。