我有一个异常的问题,超出了我的客户端技能范围。我的体内有两个连续的script
标签的html页面。两个script
标签都会触发ajax请求以检索内容,然后将其放入DOM中。我控制第一个script
标签,但对第二个script
标签没有任何控制或知识。我只知道它会进行ajax调用,然后将内容放入DOM中。我也知道我的标签是第一个。
我希望我的脚本标签立即启动并暂停/停止第二个标签。然后,根据我的ajax返回的内容,我可以选择执行第二个脚本标签。我该怎么做?
我写了fiddle来说明我的问题。我用settimeout
代替了ajax调用,用Math.random
代替了我的决定。请注意,第一个(我的)的settimeout
持续时间很长,为3秒,而第二个(我不控制的)的ext_div
持续时间很短,.5秒。现在发生的是它们都立即运行。第二条消息在.5秒后进入,而第一条消息在3秒时进入50%的时间。
我希望第一个脚本运行,等待3秒钟,做出决定并立即打印第一条消息,或者调用第二个脚本,这将等待另外的0.5秒钟来打印第二条消息。我永远都不会同时看到两个消息,也永远不会在3.5秒之前看到第二条消息。
同样,我对脚本二的内容一无所知。在这种情况下,您可以轻松隐藏id = stopPropagation
,但我不知道该id是什么。那不是我想要的答案。我当时正在考虑在第一个脚本中捕获事件,然后对该事件执行TODO1
或在resumePropgation
注释处执行类似操作。但这是行不通的。如果发生的话,我需要一个false
函数,我认为该函数不存在。
我希望我的脚本标签立即启动并暂停/停止第二个标签。然后,根据我的ajax返回的内容,我可以选择执行第二个脚本标签。我该怎么做?
使这种情况发生的唯一方法是使ajax调用同步,例如,将XMLHttpRequest#open
作为第三个参数传递给XMLHttpRequest#open
(或使用的库中的任何等效项,如果您使用的是一)。有多个原因为什么这是坏主意,但是如果您绝对肯定要在下一个script
标记执行之前完成ajax调用,那么这是唯一的方法。当然,这意味着HTML文档中script
标记下定义的所有DOM元素都不存在。