当前位置: 首页 > 面试题库 >

可以使用unload事件可靠地触发ajax请求吗?

须原
2023-03-14
问题内容

我需要一种监视用户编辑会话的方法,而我正在审查的解决方案之一将使我使用一个unload事件发送ajax请求,以通知服务器编辑会话的结束。

我对unload事件的了解(相当有限)表明,附加到此处理程序的代码必须快速运行,因此通常用于清除对象以防止内存泄漏。

我的问题是,这样做是否足够可靠?

PS。我知道这个async: false选择。


问题答案:

如果您的服务器足够快地响应,则此方法相当可靠。确实需要提防的事情。如果关闭浏览器并在unload事件上发送AJAX请求,则很有可能在窗口对象被销毁之前不会及时从服务器返回响应。在这种情况下(至少使用IE),发生的事情是它将孤立您的连接对象,直到达到连接超时后才正确终止它。如果您的服务器没有打开连接保持活动状态,则在关闭2个窗口(同时仍打开另一个窗口)之后,您将耗尽与服务器的打开连接(对于IE6-7,对于IE8-6窗口)并且您将无法打开您的网站,直到达到连接超时为止。

我遇到了这样的情况:打开打开要卸载的AJAX请求的弹出窗口之前,它非常可靠,但是受到上述发行版的困扰,我花了很长时间来跟踪它下来了解发生了什么。之后,我要做的是确保打开的窗口具有与调用服务器相同的代码,并在每次卸载时检查打开器并在其中运行代码(如果存在)。

看来,如果关闭最后一个浏览器窗口,则IE会正确破坏连接,但是如果打开另一个窗口,则不会。

PS只是对上面的答案发表评论,AJAX并不是真正异步的。至少它的JS实现不是。发送请求后,您的JS代码仍将等待服务器的响应。它不会阻止您的代码执行,但是由于服务器可能需要一段时间才能响应(或者对于Windows终止IE窗口对象足够长的时间),因此您可能并且很可能会遇到上述问题。



 类似资料:
  • 我对Azure函数的EventHubTrigger有点困惑。 我有一个物联网集线器,我正在使用它与eventhub兼容的endpoint来触发一个Azure函数,该函数将处理和存储接收到的数据。 但是,如果我的函数失败(=抛出异常),在函数调用期间正在处理的消息(或消息)将丢失。实际上,我希望Azure函数运行时在稍后再次处理消息。具体来说,我预计会有这种行为,因为EventHubTrigger正

  • 所以我实际上已经阅读了关于这个的stackoverflow问题,但是它们对于使用最新版本的wordpress来说有点太老了。 我的最终目标是提交我的表单中的一些数据到数据库,但现在ajax响应对我不起作用。在WP中的自定义页面加载中,将加载所有代码,以便所有函数都应正常工作。所有这些都在PHP文件中,为什么使用echo来创建JS脚本。这是我代码的重要部分 使用WP的当前版本,所以变量ajaxurl

  • 问题内容: 我正在尝试使用JavaScript FullScreen API,并从此处使用针对当前非标准实现的解决方法: 可悲的是,它的行为非常不稳定。我只关心Chrome(使用v17),但是由于遇到问题,我在Firefox 10中做了一些测试以进行比较,结果相似。 下面的代码尝试将浏览器设置为全屏,有时可以,有时不能。它总是调用警报以表明它正在请求全屏显示。这是我发现的: 通常设置为全屏。它可以

  • 问题内容: 该脚本每5秒重新加载或刷新页面一次。但是我想使用jQuery和AJAX调用来做到这一点。可能吗? 问题答案: 正如其他人指出的那样,setInterval和setTimeout可以解决问题。我想强调一点我从Paul Irish的精彩视频中学到的更先进的技术:http : //paulirish.com/2010/10-things-i-learned-from-the- jquery-

  • 问题内容: 只是知道,是否可以通过Ajax请求安全地发送密码? 我有一个登录框,它调用ajax请求来尝试登录/传递并检索带有错误(如果有)的JSON对象。 我应该改用表单重定向吗? [编辑] 将加密的密码存储在数据库中不是解决方案,因为ajax发送的登录名和密码是访问数据库本身(内部应用程序)的登录名/密码。 问题答案: 发送第三方无法拦截的内容的唯一方法是使用HTTPS而不是常规HTTP。这样,

  • 我需要将每个请求的不同系统属性设置为REST API。可以使用