【问题标题】:ajax onkeyup event 501 from rapid input来自快速输入的ajax onkeyup事件501
【发布时间】:2012-04-26 14:48:55
【问题描述】:

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

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

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

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

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

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

我最初的想法是为这些xmlhttprequests 创建一个队列,并且一次只打开一个。

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

每个onkeyup:

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

这个过程似乎可以解决这个问题。

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

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

【问题讨论】:

  • 让 ajax 调用 onkeyup 可能不是一个好主意。这很可能是浏览器的限制,我记得读过一些大多数浏览器只允许同时进行 7 或 8 个异步操作的内容。
  • 浏览器不会出现 501 错误。归根结底是服务器限制,因为服务器控制着 http 响应代码。
  • 不过,我认为这并不牵强。例如,以一个很多人都熟悉的非常常见的网站为例:www.google.com;我的项目绝不会接近谷歌的范围,但是如果您在控制台中注意到搜索输入中的每个按键都会发出 GET 请求。大概是因为他们的自动完成功能。
  • 是的,您的服务器可能超载。您可以在 keyup 上设置超时,或者在每次 keyup 时取消绑定您的处理程序,然后在成功时重新绑定它。
  • 我正在调查 IIS6.0 的限制,我似乎找不到规格。我的意思是即使我发出 30 个请求,据说 IIS 可以同时处理数千个连接,所以我认为它不应该超载?除非是出于安全考虑。

标签: javascript asp.net ajax xmlhttprequest onkeyup


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2023-03-09
    • 2013-09-29
    • 2011-03-12
    相关资源
    最近更新 更多