1

クライアント側のスキルセットを超えた異常な問題があります。script本文に 2 つの連続したタグを含む html ページがあります。どちらscriptのタグも ajax リクエストを起動してコンテンツを取得し、それを DOM に配置します。私は最初のscriptタグを制御していますが、2 番目のタグに関する制御や知識はありませんscript。私はそれが ajax 呼び出しを行い、DOM に何かを入れることを知っています。また、私のタグが最初であることも知っています。

スクリプト タグをすぐに起動し、2 番目のタグを一時停止/停止したい。次に、ajax が返す内容に応じて、2 番目のスクリプト タグを実行することを選択できます。どうすればいいですか?

私の問題を示すフィドルを書きました。settimeout私は ajax 呼び出しとMath.random私の決定を'sに置き換えました。settimeout最初のもの (私のもの) の持続時間は非常に長く、3 秒であり、2 番目のもの (私が制御していないもの) の持続時間は非常に短く、0.5 秒であることに注意してください。2 番目のメッセージは 0.5 秒で到着し、最初のメッセージは 50% の確率で 3 秒で到着します。

最初のスクリプトを実行し、3 秒待って決定し、最初のメッセージをすぐに出力するか、2 番目のスクリプトを呼び出して 2 番目のメッセージを出力するためにさらに 0.5 秒待つ必要があります。両方のメッセージが同時に表示されることはありません。また、3.5 秒前に 2 番目のメッセージが表示されることもありません。

繰り返しますが、スクリプト 2 の内容に関する知識はありません。この場合、 id= を簡単に隠すことができますがext_div、その id が何であるかはわかりません。それは私が望む答えではありません。最初のスクリプトでイベントを取得して、それに対して何かをするか、コメントstopPropagationでそのようなことをすることを考えていました。TODO1しかし、それはうまくいきません。もしそうなら、resumePropgation存在するとは思わない関数が必要になります。

4

2 に答える 2

0

スクリプトタグをすぐに起動し、2番目のタグを一時停止/停止したい。次に、ajaxが返すものに応じて、2番目のスクリプトタグを実行することを選択できます。どうすればよいですか?

これを実現する唯一の方法は、ajax呼び出しを同期させることです。たとえば、false3番目の引数としてXMLHttpRequest#open(または、使用しているライブラリにあるものを使用している場合は、同等のものを)に渡します。これが悪い考えである理由はいくつかありますが、絶対に、次のタグが実行される前にajax呼び出しを完了する必要がある場合は、それが唯一の方法です。もちろん、HTMLドキュメントのタグの下に定義されているDOM要素はまだ存在しないことを意味します。scriptscript

于 2012-10-30T23:06:44.433 に答える
0

フロントエンド スクリプトにある種の依存関係管理システムが必要なようです。

RequireJSを試してみてください。スクリプトをロードし、ajax リクエストを実行し、ロジックに応じて、2 番目の外部スクリプトをロードするかどうかを決定できます。

もちろん、これはページ上のマークアップを制御できることを前提としています。

于 2012-10-30T23:14:41.083 に答える