1

我有一个不寻常的问题,超出了我的客户端技能。我有一个 html 页面,script正文中有两个连续的标签。两个script标签都会触发一个 ajax 请求来检索内容,然后将其放入 DOM。我控制第一个script标签,我对第二个标签没有任何控制或知识script。我只知道它会进行 ajax 调用并将内容放入 DOM。我也知道我的标签是第一位的。

我希望我的脚本标签立即触发并暂停/停止第二个标签。然后,根据我的 ajax 返回的内容,我可以选择执行第二个脚本标记。我该怎么做呢?

我写了一个小提琴来证明我的问题。我用settimeout's 代替了 ajax 调用和Math.random我的决定。请注意,settimeout第一个(我的)的持续时间很长,3 秒,第二个(我无法控制的持续时间很短,0.5 秒。现在发生的是它们都是立即运行。第二条消息在 0.5 秒到达,而来自第一条的消息在 3 秒到达 50% 的时间。

我希望第一个脚本运行,等待 3 秒,做出决定并立即打印第一条消息,或者调用第二个脚本,该脚本将再等待 0.5 秒以打印第二条消息。我不应该同时看到两条消息,也不应该在 3.5 秒之前看到第二条消息。

同样,我对脚本 2 的内容一无所知。在这种情况下,您可以轻松隐藏 id= ext_div,但我不知道该 id 是什么。那不是我想要的答案。我正在考虑在第一个脚本中抓住事件并对此做一些事情,stopPropagation或者在TODO1评论中做类似的事情。但这不起作用。如果确实发生了事件,我将需要一个resumePropgation我认为不存在的函数。

4

2 回答 2

0

感觉就像您想要为您的前端脚本提供某种依赖管理系统。

试试RequireJS。您可以加载您的脚本,运行您的 ajax 请求,并根据您的逻辑,决定是否加载第二个外部脚本。

这是假设您当然可以控制页面上的标记。

于 2012-10-30T23:14:41.083 回答
0

我希望我的脚本标签立即触发并暂停/停止第二个标签。然后,根据我的 ajax 返回的内容,我可以选择执行第二个脚本标记。我该怎么做呢?

实现这一点的唯一方法是使您的 ajax 调用同步,例如,false作为第三个参数传递给XMLHttpRequest#open(或您正在使用的库中的任何等效项,如果您正在使用一个)。为什么这是一个坏主意几个原因,但是如果您绝对肯定需要在执行下一个标签之前完成 ajax 调用,那么这是唯一的方法。当然,这意味着HTML 文档中您的标签下方定义的任何 DOM 元素都不存在。scriptscript

于 2012-10-30T23:06:44.433 回答