我有一个超出我的客户端技能的异常问题。我有一个html页面,在主体中有两个连续的script
标签。两个script
标记都会触发ajax请求以检索内容,然后将其放入DOM中。我控制了第一个script
标记,而我对第二个script
标记没有任何控制或知识。我只知道它会调用ajax并将内容放入DOM中。我也知道我的标签是第一个。
我希望我的脚本标记立即触发并暂停/停止第二个标记。然后,根据我的ajax返回的内容,我可以选择执行第二个脚本标记。我该怎么做?
我写了fiddle来证明我的问题。我为ajax调用替换了settimeout,为我的决定替换了Math.random。请注意,第一个(我的)的settimeout持续时间非常长,3秒,第二个的持续时间(我不控制的持续时间非常短,0.5秒。现在发生的是他们是两个人都立刻跑了。第二个人发出的消息是在0.5秒内发出来的,第一个人的消息在50%的时间里以3秒的速度进入。
我希望第一个脚本运行,等待3秒,做出决定并立即打印第一条消息,或者调用第二个脚本,该脚本将等待额外的0.5秒以打印第二条消息。我不应该同时看到这两条消息,而且我不应该在3.5秒之前看到第二条消息。
同样,我不知道对脚本二的内容有任何了解。在这种情况下,您可以轻松隐藏id = ext_div
,但我不知道该ID是什么。那不是我想要的答案。我正在考虑抓住第一个脚本上的事件并对stopPropagation
或TODO1
评论中的类似内容做些什么。但这不起作用。事件如果确实如此,我需要一个我认为不存在的resumePropgation
函数。
答案 0 :(得分:0)
我希望我的脚本标记立即触发并暂停/停止第二个标记。然后,根据我的ajax返回的内容,我可以选择执行第二个脚本标记。我该怎么做?
实现这一目标的唯一方法是让你的ajax调用同步,例如,将false
作为第三个参数传递给XMLHttpRequest#open
(或者你正在使用的库中的等价物,如果你正在使用一个)。有几个原因为什么这是一个坏主意,但如果你绝对需要你的ajax调用在下一个script
标记执行之前完成,那就是唯一的方法。当然,这意味着HTML文档中script
标记下面定义的任何DOM元素都不会存在。
答案 1 :(得分:0)