在Javascript方面,我为<input>
事件的文本onkeyup
注册了一个事件监听器。
每次触发事件时,都会调用一个函数来创建一个xmlhttprequest
对象,该对象将输入的value
作为url编码的POST
变量传递给请求。
请求页面是一个aspx
脚本,它接受post变量,对其进行一些处理,并将处理后的输入作为参数添加到MS SQL查询中。从执行查询生成的结果集放入dataset
,转换为XML,然后通过XSLT转换为XHTML,然后插入到通过innerHTML
注入进行ajax调用的页面中方法
如果您到目前为止跟踪了我,结果是在MS SQL DB上进行全文搜索,为每个密钥版本生成结果。还值得一提的是我使用的是MS SQL 2005和IIS6.0。
除了一个测试用例外,系统看起来效果很好。也就是说,有人只是尽可能快地输入输入,服务器最终会为每个请求返回501 internal server errors
。几分钟后,它似乎“修复”自己并再次正常运行。我无法从IIS中获取有关这些内部错误的任何有用信息。
现在这仅仅是猜测,但我的第一个假设是,有太多未公开的同时请求尚未完成,或者在短时间内提出的请求太多。
我最初的想法是创建这些xmlhttprequests
的队列,并且一次只打开一个。
然而,我试过这个而不是队列:
每个onkeyup
:
abort
xmlhttprequest
上致电onkeyup
xmlhttprequest
onkeyup
醇>
此程序似乎可以解决问题。
我无法做的是确定此问题的根本原因:它是服务器限制吗?或者它是浏览器限制?有没有其他方法可以解决这个问题,而不需要这个中止程序?
我可以在必要时发布代码,但是代码非常冗长,并且在这个项目中使用了很多技术,所以我不确定它是否能真正帮助任何人回答这个问题。