2013-10-14 25 views
0

我想將所有的javascript ajax調用整合到Javascript顯示模塊中。 然而,有1和名爲ROOTPATH全局JavaScript財產被硬編碼到瀏覽網頁使用的頁內廣告腳本標籤:Javascript RootPath屬性@ Url.Content(「〜/」)在JavaScript中顯示模塊

var RootPath = '@Url.Content("~/")'; 

在一個單獨的.js文件中,我創建調用從我的服務器端獲取JSON。

var dataService = function() { 
     var url = RootPath + "API/GetData", 
     getData = function() { 
      return $.getJSON(url); 
     }; 

     return { 
      getData: getData 
     }; 
}(); 

問題是Javascript對象內部的這個全局RootPath是未定義的。我怎樣才能在我的對象內獲得這個全局屬性?

+1

我通常把網址放在窗體的隱藏字段中,並從javascript中拖出隱藏的字段 –

+0

您可以確認在定義「RootPath」變量的onpage腳本之後是否包含單獨的js? – Ankit

+0

如果你真的想使用這個「全局」RootPath變量,你可以做的一件事是這個,window.rootPath ='@ Url.Content(「〜/」)'; (這應該是在佈局頁面或在你知道它首先運行的地方比JavaScript文件),然後在你的JavaScript文件只是做,window.rootPath – hjgraca

回答

0

我已經在過去良好的效果使用這種方法:

<base href="@string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"))"> 

你不應該需要指定它每次請求即可。

基地標籤的定義:http://www.w3schools.com/tags/tag_base.asp

+0

我將不得不考慮這個 – matthewbaskey

+0

示例是用於圖像,這是一個腳本......在任何其他事物運行之前發佈消息。 – matthewbaskey

-1

可以請你試試這個?

var dataService = function() { 
     var url = "/API/GetData", 
     getData = function() { 
      return $.getJSON(url); 
     }; 

     return { 
      getData: getData 
     }; 
}(); 

請注意我已刪除RootPath變量,直接使用var url = "/API/GetData" ..只是試試這個,我認爲它應該工作

+1

如果他的網址類似localhost/webapp,那麼該怎麼辦......在這種情況下,你的電話會轉到localhost/api/getdata ...它永遠不會工作。 –

+0

這確實有效,但該應用程序部署在網站上的不同實例中在子文件夾上,即。 http://xxx.com/abc和http:// xxx。com/xyz所以RootPath有改變AJAX調用的URL – matthewbaskey

0

試着將全局變量在頁面的頂部/ layout.cs HTML;

<html><head> 
</script type="text/javascript"> 
var RootPath = '@Url.Content("~/")'; 
</script> 
<script src="my_jsfiles" type="text/javascript"> 

<head> 

在頂層定義JS將總是從頁面

+0

這就是我正在做的,RootPath變量可以在我單獨的.js文件中訪問。但是,當js揭示模塊類新增時,它具有未定義的RootPath。我看着WatchList,它不在那裏。當函數被調用時,它被定義,所以我可以在我的函數中調用它,但不能在我的js對象中指定它作爲變量。 – matthewbaskey

0

如果你真的想使用「全局」 ROOTPATH變量的所有的地方訪問,有一兩件事你可以做的是,

window.rootPath = '@Url.Content("~/")';

(這應該是在佈局頁面或一個地方,你知道這比第一次的JavaScript文件運行),然後在你的JavaScript文件只是做,

​​
+0

我需要把var放在它的前面嗎? t var window.rootPath ='@ Url.Content(「〜/」)';因爲只需在_layout.cshtml中輸入你所做的事情,當我新啓動我的揭示模塊時,變量仍然不存在。 – matthewbaskey

+0

不,你不需要var,窗口是瀏覽器,你總是可以訪問JavaScript或瀏覽器控制檯中的窗口。 – hjgraca