在Firefox下按Escape会导致我的Ajax请求失败.我想阻止这个

Yor*_*ric 9 javascript ajax firefox comet javascript-events

我正在开发一个需要长时间运行Ajax请求的Web应用程序.不幸的是,在Firefox下,在请求期间按Escape会导致终止请求及其持有的任何信息.这是相当烦人的,因为如果在错误的时间发生这种情况会导致各种令人讨厌的并发症.因此,我想停用此功能.

我的第一反应是拦截<body>边界处的按键,以确保它们不会到达窗口.为此,我安装了一个[keypress]事件处理程序,仅用于[keyChar]为27的事件,并调用[stopPropagation]和[preventDefault].有一段时间,它似乎正在发挥作用.

然后,我意识到当用户没有点击窗口上的任何地方时它不起作用,因为<body>事件处理程序从未收到过该事件.我试图将我的处理程序附加到<document>或<window>无效,所以我最终添加了一个[load]事件处理程序,并强制将焦点转移到<body>.有一段时间,它看起来像是在起作用.

然后,我意识到当用户正在编辑<input>时,由于某种原因,<body>,<document>或<window>事件处理程序似乎永远不会收到该事件.所以,我添加了另一个[keypress]处理程序,当[keyChar]为27时,在<input>上拦截[preventDefault].

目前,看起来它正在发挥作用.但是,随着我的应用程序中这个错误的历史,我有点悲观.

所以,我想知道是否有更好的,可重复的方法.回想一下这个bug似乎只出现在FF中,所以我非常愿意在这里采用仅FF的方法.

谢谢

Ken*_*ick 2

我担心当用户选择书签或以其他方式在请求中间导航时会发生其他令人讨厌的复杂情况。您可能想看看为什么要使用长时间运行的请求,并看看是否可以更改...

如果它不是您可以更改的内容(或者即使您可以更改),您应该查看为什么您的请求不具有容错能力。有没有一种方法可以将通信放入事务中,并在连接中断时回滚最新的事务?