2011-08-31 18 views
2

URLは次のとおりです。私は私が指定したすべての時間を正常に動作私のサイトにいくつかのAJAXアクションを実行するためにgetJSON jQueryの&を使用しています壊れた相対URLメソッド

http://localhost/mysite/blah... 

URLとして:

/mysite/controller/action 

..butこれは私がファイルを含め、私の別々のjQueryに私の開発のURLをハードコーディングしたくないとして理想的ではありません。

サイトがライブになると、コントローラ/アクションまたは/コントローラ/アクションをURLとして持つことで問題は解決しますが、開発サイトではそれは問題ありません。

私が試してみた:

controller/action 

を..butこれは私がの/ URLの先頭に不足がWebサイトのルートを見てから防ぐだろうと思ったとして私を驚か404を返します。

これにはすっきりした解決策が必要ですか?

答えて

4

である私は私のHTMLヘッダーでグローバル定数を挿入することによってこれを行うだろう:

<script type="text/javascript"> 
    var BASE_URL = '/mysite/'; 
</script> 

これはサーバーから挿入されるため、動的に変更することができます。 後のスクリプトで、あなたは(ここではjQueryのスタイル)でAJAXリクエストを作ることができるでしょう:

$.ajax(BASE_URL + '/controller/action', ...); 
1

あなたは

/mysite/controller/action 

にいる場合は、

/mysite/some_other_controller/some_other_action 

への正しい相対パスが

../../some_other_controller/some_other/action 
+1

残念ながら、常に同じパスから呼び出されるわけではないので、../../がいくつかの領域で機能しますが、他の場合は失敗します。 – marcusstarnes

0

あなたを計算するためにあなたが.jsファイル、スクリプトの現在のパスを取得し、それを使用するには、このコードを使用することができます相対パス。

var url; 
$("script").each(function() { 
     if ($(this).attr("src").indexOf("[YOUR_SCRIPT_NAME.JS]") > 0) { 
       url = $(this).attr("src"); 
       url = url.substr(0, url.lastIndexOf("/")); 
       return false; 
     } 
}); 
var final_url = url + "/your_target_script.js" 

YOUR_SCRIPT_NAMEをスクリプトの一意の名前に置き換えます。