Python / AJAX / JavaScript - 在GET期间两次打印HTML页面

时间:2011-05-19 15:27:54

标签: javascript python ajax cgi

我目前在我的程序中存在一个问题,我正在尝试使用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();
}

请帮忙

2 个答案:

答案 0 :(得分:0)

那是因为您将响应的内容类型指定为text / html,当浏览器收到此标题时,它会输出相同的页面两次。尝试将内容类型指定为text / plain或使用不同的输出格式(XML或JSON)

答案 1 :(得分:0)

您的活动如何设置?

在图片http://img819.imageshack.us/img819/5808/city4p.jpg中,我可以看到它是使用q=调用的,并且没有要遵循的字符串,因此使用空字符串调用showCity。这使您的脚本成为打印模板路径。

是否可以显示调用showCity的代码?

使用onkeypress。从快速测试来看,似乎根本没有注册退格。除此之外,您需要过滤退格键或至少检查字符串是否包含内容。