AJAX+.net实现无刷新搜索,无须提交,边输边查
这个功能看起来挺简单的,不过还是很有琢磨之处。
之前,用纯的AJAX来实现实现无刷新搜索的功能,但是一直无法解决中文内容显示的问题。以前看过用VBS实现XMLHTTP的中文转换,后来,用VBS写了个同样功能的,中文问题倒是解决了,但是发现VBS中又无法完美的实现AJAX的返回事件,导致搜索新关键字无法显示搜索结果,二次搜索同样关键字时才出现,这个问题也一直没解决。
之后,想了想,还是用AJAX结合服务器端的功能来实现看看。本人本来就是.net的开发者,所以,理所当然的使用.net来帮忙了。
也没有太复杂的编码,AJAX+.NET很轻松解决了中文内容的乱码问题。
不过有一点要注意。中文URL参数的问题。一开始蛮顺利,以为很快就可以解决,完成调试的时候才发现,虽然中文参数能搜索而且内容显示也是中文没错,不过发现搜索结果有问题。中文的查询参数得到的是乱码的查询参数,一开始以为又遇到AJAX的老问题(中文乱码)的相似的问题,调试后发现,AJAX的URL参数并无什么异常,通过文本筐输入的是什么得到的就是什么,再调试后发现原来是用参数请求ASPX页面的时候,ASPX页面得到的中文的参数被UTF-8转换成了乱码,后来直接将参数写到后台代码,发现,原来在GOOGLE的查询参数中指定IE=UTF-8就可以了,因为GOOGLE本来就支持中文参数的查询。到这里以为问题解决了,可以再调试的时候中文参数还是乱码,……,原来还是ASPX页面的问题,ASPX页面获得URL参数后还是被转换成了UTF-8的编码,由于上一次调试是将文字直接写到了后台代码,所以这一步的转换没发现。绝望之中又看到了曙光,记得以前用<script src=XXX.aspx></script>调用页面的时候也出现乱码问题,后来是在WEB.CONFIG文件里修改 <globalization requestEncoding="gb2312" responseEncoding="gb2312" />这个解决的,想了想,这里的问题似乎也是一个道理,REQUEST的编码方式是由于UTF-8造成的那么就把WEB.CONFIG的这里也用相同的方法改了就行了,果然……成功。
如有兴趣的朋友可以去看看http://www.vpart.net/google.htm 这就是我做的小事例,不过根据我这个事例来看,效果并不太好,原因是速度问题,虽然用户个字的输入都会无刷新的获得结果,但是似乎响应时间并不能满足要求,第一次出现的关键字在用户输入后也许要等待一会(第二次输入同样的关键字会很快,因为调用的是客户端的缓存),实际上还是用户全部输入完成后获得的结果,理论上是即输即得,但实际效果并不那么好,不过这个模式还是值得研究,如果是采用服务器本地的资源就很好了。
有兴趣的朋友可以帮忙看看有没什么BUG