1

在 Javascript 方面,我为事件的文本注册了一个事件侦听<input>onkeyup

每次触发事件时,都会调用一个函数来创建一个xmlhttprequest对象,该对象将输入value作为 url 编码POST变量传递给请求。

请求页面是一个aspx脚本,它接受 post 变量,对其进行一些处理,并将处理后的输入作为参数添加到 MS SQL 查询中。执行查询产生的结果集被放入转换为 XML 的 a中,然后通过 XSLT 转换为 XHTML,然后通过注入方法dataset插入到进行 ajax 调用的页面中。innerHTML

如果您到目前为止一直关注我,结果是在 MS SQL 数据库上进行全文搜索,该数据库会为每个密钥版本生成结果。值得一提的是,我使用的是 MS SQL 2005 和 IIS6.0。

该系统似乎运行良好,除了一个测试用例。那就是当有人尽可能快地输入输入时,服务器最终会501 internal server errors为每个请求返回。几分钟后,它似乎会自行“修复”并再次正常运行。我无法从 IIS 中获得有关这些内部错误的任何有用信息。

现在这只是猜测,但我的第一个假设是,要么有太多未完成的同时打开的请求,要么在短时间内发出了太多的请求。

我最初的想法是创建一个队列xmlhttprequests一次只打开一个。

但是,我尝试了这个,而不是队列:

每个onkeyup

  1. 调用生成abort的最后一个xmlhttprequestonkeyup
  2. 为此创建一个新xmlhttprequestonkeyup

此过程似乎可以消除该问题。

我无法做的是确定这个问题的根本原因:它是服务器限制吗?还是浏览器限制?是否有其他方法可以在不需要此中止程序的情况下解决此问题?

如有必要,我可以发布代码,但代码非常冗长,并且该项目中使用了许多技术,所以我不确定它是否真的能帮助任何人回答这个问题。

4

1 回答 1

1

你可能想看看去抖动。

http://ajaxian.com/archives/debounce-your-javascript-functions

于 2012-04-26T15:03:24.283 回答