来自快速输入的 AJAX OnKeyUp 事件 501

ajax onkeyup event 501 from rapid input

本文关键字:AJAX OnKeyUp 事件 输入      更新时间:2023-09-26

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

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

请求页是一个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

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

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

我无法做的是确定此问题的根本原因:是服务器限制吗?还是浏览器限制? 有没有其他方法可以解决此问题而无需此中止过程?

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

你可能想看看去抖动。

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