zishu's blog

zishu's blog

一个热爱生活的博主。https://zishu.me

ajaxとjsのイベントの実行順序

スクロールが特定の位置に到達したときに現在のアニメーションを実行する必要があります。このアニメーションは footer 内にあり、ウェブページの本体は ajax を使用してレンダリングされます。私は JavaScript で ajax を呼び出してデータをレンダリングし、次に本体の高さを取得し、その高さにスクロールしたときにアニメーションを実行します。

ローカルでテストしたところ、問題はありませんでした。必要な効果がすべて得られました。サーバーにテストしたところ、どのように書いても、まず本体の高さを取得し、その後データをレンダリングします。したがって、高さは極めて小さな値であり、私が望む属性には合いません。

私はおおよそ 2 つの解決策を考えましたが、どちらも失敗しました。ローカルでは ajax が最初に実行され、サーバーでは JavaScript が最初に実行されます。

  1. 高さを取得するイベントを 500ms 遅延させると、最終的にイベントを取得できなくなりました。
  2. このイベントを ajax の success コールバックに書いたところ、最初にウェブページを開いたときだけ成功し、その後何度リフレッシュしても無効であり、イベントがブロックされるため、方法 2 も廃止されました。

最後に、ajax は非同期メソッドではないですか、それを同期に変更すればいいのではないかと思いつきました。最初に ajax を実行してから JavaScript イベントを実行します。

async: false,

私は ajax 内で async というメソッドを書き、 false はデフォルトで同期的にデータを取得することを意味します。素晴らしい、サーバーに戻ってコンソールを開くと、データがまずレンダリングされ、その後本体の高さが取得されることがわかりました。問題は解決されました。

もちろん、これには欠点があります。インターフェースに問題がある場合、ajax のレンダリングが失敗すると、ウェブページ全体の JavaScript が実行されません。ただし、データがレンダリングできない状況に本当に到達した場合、ウェブページにアクセスする意味がなくなると考えられるため、最終的にこの方法を採用しました。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。