我有一个运行各种javascript代码的页面,包括调用setTimeout()
。如果用户单击链接以导航到另一个页面,此页面上的javascript何时停止运行,因此将不再调用由setTimeout调用的代码? e.g。
对于不同的主流浏览器,这是不同的吗?
背景
我想知道这主要是出于利益而不是解决任何特定问题。促使我思考这个问题的问题是,当用户点击页面上的特定链接时,我想做点什么。我想执行ajax调用并处理结果,但是我不太关心它是否在页面卸载之前完成。所以我会在链接点击时触发一个setTimeout()然后如果我很幸运它会完成但是如果我不是它就不会。我想知道在什么情况下它会起作用。虽然可能有其他解决方案来解决这个问题,但我不想解决问题,我只想知道问题的答案。
答案 0 :(得分:3)
以下是发生的事情的顺序:
第1步:点击链接。这里浏览器向服务器发送请求并等待响应。当前页面的文档对象仍然存在。
第2步:浏览器收到响应。当前页面的文档对象仍然存在。
步骤3:浏览器解析,创建并呈现对新文档对象的响应。
步骤3是当前页面的JS将停止,除非您已将目标响应定位到iframe,例如。如果你这样做,那么新的文档对象将在iframe中呈现,当前页面的文档对象保持不变,JS仍然可以保持正常运行。
希望能回答你的问题!
答案 1 :(得分:0)
一种可能的解决方案是停止click事件,触发异步调用并在处理完ajax调用的结果后恢复默认事件。或者,如果可能,您可以处理服务器上的处理,在这种情况下您甚至不需要停止默认事件 - 只需触发异步调用。
在回答你的问题时,我同意Jack的说法,该脚本会在onunload事件后停止运行。
希望这一点。