2010-10-15 25 views
1

這是另一個非常簡單的問題,我無法找到一個優雅的解決方案。基本上,我有一個使用jQuery Ajax調用的應用程序。在這個調用中,你必須爲你正在調用的服務指定一個URL路徑。在這種情況下,我需要從我的應用程序中的多個文件調用該JavaScript函數,這些文件位於不同級別的文件夾結構中。當訪問不同的目錄級別時,jQuery Ajax Url路徑中斷

下面是一個問題,您將如何優雅地處理這種情況,以便您可以從應用程序中的任何位置調用JS函數。這裏是我的約束:

1)我在Asp.Net 4.0上運行。 2)我當前的環境具有本地開發,測試和生產環境(對URL路徑進行硬編碼將不起作用)。

代碼段:

function MakeTheCall() { 

    $.ajax({ 
    type: "POST", 
    url: "Services/FileName.asmx/Handler", //Path in Question 
    data: "", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(result) { 
    }, 
    error: function(xmlHttpRequest, status, err) { 
    } 

    }); 
} 

我想能夠調用從不同的目錄層次的文件,比如該功能(這是一個外部JavaScript文件):

1)http://SomeDomain.com/SomeDir/CallingFile.aspx 2)http://SomeDomain.com/CallingFile.aspx

有什麼建議嗎?我可以想到幾種不同的方案來解決這個問題,但大多數是圍繞創建JavaScript變量並在C#中設置它的值。希望有更好的方法?

謝謝!

回答

3

你試過url: "/Services/FileName.asmx/Handler"

編輯:上述的適用性取決於您是否將「服務」目錄與域名相關的級別始終保持在同一級別。如果你在不同的路徑下部署整個應用程序,那麼你需要使用

// in code-behind file 
string rootURL = HttpContext.Current.Request.Url.GetLeftPart(System.UriPartial.Authority) + 
    "/" + HttpContext.Current.Request.ApplicationPath + "/"; 

// in .aspx 
url: <%Response.Write(rootURL)%> + "Services/FileName.asmx/Handler" 
+0

是的,我當/ /「/」作爲初始路徑的一部分。其中一個缺點是我的一個環境實際上被設置爲一個虛擬目錄而不是它自己的網站,這增加了一個新的痛苦程度。 :/認爲選項2將不得不成爲我的路線。 – Nathan 2010-10-15 14:46:31