Javascript 如何停止esc键停止重定向

Javascript 如何停止esc键停止重定向,javascript,ajax,forms,keyboard,submit,Javascript,Ajax,Forms,Keyboard,Submit,使用AJAX提交订单: 用户填写表单并单击提交 禁用提交按钮以防止多次单击 弹出模式,通知正在提交订单 通过ajax提交表单 如果成功,则重定向到订单确认页面 如果不成功,说明原因,隐藏模式,重新激活提交…等等 问题是,当他们单击提交时,如果他们然后单击escape键,它可以停止重定向,然后页面就被挂起,即使订单技术上已经通过 问题: 如何防止用户使用escape键停止重定向 我认为用户甚至不知道他们在做什么,但在我的情况下,订单已经被处理了。点击escape只会让他们看不到确认页面,很可能让他

使用AJAX提交订单:

  • 用户填写表单并单击提交
  • 禁用提交按钮以防止多次单击
  • 弹出模式,通知正在提交订单
  • 通过ajax提交表单
  • 如果成功,则重定向到订单确认页面
  • 如果不成功,说明原因,隐藏模式,重新激活提交…等等
  • 问题是,当他们单击提交时,如果他们然后单击escape键,它可以停止重定向,然后页面就被挂起,即使订单技术上已经通过

    问题:

    如何防止用户使用escape键停止重定向

    我认为用户甚至不知道他们在做什么,但在我的情况下,订单已经被处理了。点击escape只会让他们看不到确认页面,很可能让他们认为订单没有通过


    有没有其他/更好的方法来处理这种情况?

    我不知道你到底想做什么,但我假设在成功破坏了你的网站逻辑之后,我会留在页面上,我会给你一些提示

    但是请注意,这个问题没有最终的解决方案,用户可以单击浏览器上的“停止”按钮,也可以同时关闭选项卡

    所以我假设这只是为了防止用户出错

    第一种方法:当成功回调触发时,使用一个布尔变量作为标志来保留成功状态,现在当用户再次提交时,如果是真的,您可以再次重定向,或者甚至可以放置一个计时器,尝试每x秒重定向一次,例如基于此标志


    第二种方法:(我不确定这是否有效!)为escape按钮注册一个键盘事件,并使用event.stopPropagation使用该事件。这甚至可能依赖于浏览器

    您最初的submit将Ajax请求发送到某个web服务以完成订单,例如
    /ordersubmit
    。成功订购后,web服务中的逻辑返回重定向响应。响应可能需要一些时间,用户可以在收到响应之前取消请求

    创建一个新的web服务,例如检查订单的
    /orderstatus
    ,如果成功,将返回与
    /ordersubmit
    相同的重定向响应。如果订单仍处于挂起状态或出现错误,请返回适当的消息正文

    web订单页面在向
    /ordersubmit
    发出初始Ajax请求后启动了计时器。当计时器过期时,页面向
    /orderstatus
    发送一个新的Ajax请求,并对响应进行操作


    如果响应不是重定向,则启动新计时器并再次检查。如果三次尝试后订单仍未完成,则显示适当的消息,要求他们联系支持。

    您不能。如果用户想要停止用户代理(例如浏览器),他们可以。浏览器中的“停止”按钮也可能发生同样的情况。让页面在一段时间后轮询订单的状态,这样它就可以在不发送订单的情况下检索所需的重定向。@DaveAnderson-我不明白。你能澄清一下吗?也许在重定向之前通知用户订单已经通过了?这样,即使发生了什么事情,他没有登录到确认页面,他也知道订单已通过。我如何知道要检查哪个订单是否尚未创建(或已创建,但未传回ID,因为脚本已停止)?使用订单生成唯一的请求引用,如果您有用户帐户,请将其作为参考的一部分。如果您有.Net,可以使用会话id作为引用的一部分。任何您可以创建的客户端都是唯一的,并且可以与下一个请求一起发送,并允许您将其与原始订单提交相匹配。稍微复杂一点的是,在发送剩余订单之前,快速初始Ajax请求生成客户端所需的订单参考服务器端。