アプリケーションのさまざまな部分を照会するために AJAX 関数を処理する一連の静的な JavaScript ファイルがあり、アプリケーションの複数のバージョンをデプロイしているため、次のようなものがあるかもしれません。
https://www.myurl.com/projectName/ - production release
https://www.myurl.com/projectName_alpha/ - current alpha release
https://www.myurl.com/projectName_beta/ - current beta release
https://www.myurl.com/projectName_unstable/ - current development build
そのため、AJAX 呼び出しを行いたいコントローラー "foo" がある場合/projectName/foo
、URL としてハードコードすることはできません (常に製品リリースを指すため)。現在、プロジェクトのベース URL をグローバル変数として取得するスクリプトを各ビューに挿入します。
<script type="text/javascript">
// declare a global variable to hold the project's base URL
var baseUrl = '<spring:url value="/" />';
</script>
次に、JavaScript ファイルでそれを参照します。
var url = baseUrl + 'foo/';
これは機能的ですが、解決策としては醜いので、回避できるのであれば、グローバル名前空間を汚染したくありません。より良い回避策を実装する方法について何か提案はありますか?
明確にするために: ソリューションは、AJAX ベースであるかどうかにかかわらず、あらゆるタイプのリクエストに対して実行可能である必要があります。呼び出し、タグの属性のwindow.open
設定、およびコントローラーへの AJAX 呼び出しの作成はすべて、ソリューションで機能する必要があります。ベースURLが何であるか、またはそれが何層の深さであるかに関係なく、適用できる必要があります。たとえば、次のようになります。src
<img>
https://www.myurl.com/
https://www.myurl.com/projectName/
https://www.myurl.com/projectName_alpha/1.2.3/
すべてが適切に検出されるはずです。