2011-05-26 67 views
1

我總是用這種方式編寫由AJAX調用使用的URL:"/Home/Save",其中以正斜槓開頭。現在這個最後的項目被部署到服務器上的虛擬目錄。因此,這些網址不再有效,因爲它們不是"example.com/VirtualDir/Home/Save",而是指向"example.com/Home/Save"這是錯誤的。我通過在我的JavaScript中的所有URL中刪除第一個正斜槓"/"來快速修復此問題。所有頁面都很好,除了一個!當AJAX調用發生在有問題的頁面上時,指定的URL會被追加到頁面URL。我昨天和今天整個上午都花了幾個小時,但我無法弄清楚。這個頁面與其他頁面完全沒有什麼不同。有沒有人有過這個問題?我應該發佈我的代碼嗎?jQuery中正斜槓「/」的問題AJAX

編輯︰我的頭在鍵盤上敲了幾個小時後,我結束了以下實施。我在一個共同的控制器中得到了一個動作,返回Request.Url.GetLeftPart(UriPartial.Authority)的結果,這是您的http://www.mysite.com。我將它在我的Layout頁面中渲染成一個全局JavaScript變量,_AppPath。然後,每個AJAX調用都會得到如下的URL:_AppPath + '/Controller/Action'。這在任何地方都行得通,我仍然不知道那個黑客是什麼問題。乾杯!

+0

這一頁有一個非常不同的網址嗎?除了這個問題之外,是什麼使這一個頁面不同? – NickAldwin 2011-05-26 16:09:08

+0

@NickAldwin - 絕對沒有。它是.NET MVC。我擁有的所有頁面都是其中包含1 - 3個部分視圖的視圖。網址都像'localhost:2244/Home/Display',JavaScript在每個視圖上都以完全相同的方式寫入剃鬚刀部分。總是有一個$(document).ready()從JS文件調用Init函數,該文件設置觸發AJAX調用的點擊處理程序。無處不在。 – Dimskiy 2011-05-26 16:23:28

回答

1

您可以更改Ajax請求,以便它們改爲指向「/ VirtualDir/Home/Save」嗎?

如果它可以幫助你的代碼,你可以有一個path變量,這樣當你將它部署到其他地方時,你可以輕鬆地更新虛擬目錄路徑(或刪除它)。或者你的代碼可以通過window.location.href屬性讀取它的位置,並從那裏得出結果。

相對於當前文檔(即沒有/斜線前綴)的路徑沒有那麼有用,因爲正如你所觀察的那樣,當這些頁面處於不同的點時,有些頁面會失敗它們的請求網站層次結構。一個絕對的URL將是一個去的(即用/斜線前綴)。

[更新內容的基礎上,下面的評論]

@Dimskiy,它沒有那麼多的事情,服務器端框架是.NET MVC,或者說有針對服務器上的這些網址沒有實際的文件夾。瀏覽器將根據它所看到的URL結構進行響應。

因此,要查找的內容是瀏覽器地址欄中不同頁面的URL,以及向服務器發出的Ajax請求的URL(例如,在Firebug的「Net」面板中查找這些URL)。比較這些網址,查看每個網址所建議的文件夾數量。

如果服務器上沒有實際的文件夾,則無關緊要。瀏覽器無法分辨,它只能查看URL結構。如果JavaScript在「Home/Save」中從名爲「foo」的頁面調用Ajax資源,則該請求將被路由到「foo/Home/Save」。如果請求是從頁面「foo/bar」發出的,那麼它將被路由到「foo/bar/Home/Save」。這是一個相對路徑 - 它與包含的HTML文檔相關。

對「絕對」路徑的請求,比如說「/ Home/Save」(注意/斜線前綴)總是會到達域的根目錄,例如, example.com/Home/Save。但是由於您需要訪問「VirtualDir」虛擬目錄,您的URL將變爲「/ VirtualDir/Home/Save」。

+0

感謝您的輸入!我想到了這些和類似的解決方案,如果我不知道這一點,我肯定會與其中一個。但爲了理智,我想知道爲什麼它是1頁有這個問題,當它沒有任何其他頁面不同。 – Dimskiy 2011-05-26 16:07:10

+0

這是一個頁面與其餘的文件夾不同嗎?當你在前面指定一個沒有正斜槓的網址時,它意味着「使用我目前所在的文件夾,並將此路徑添加到它」。 – James 2011-05-26 16:41:31

+0

@詹姆斯 - 這不是一個真正的文件夾。這是.NET MVC,所以我得到了控制器和操作。產生頁面的動作和處理AJAX調用的動作位於同一個控制器中。例如:'Home/Display'是頁面,'Home/Save'是AJAX處理程序。簡單地說,它是一個控制器類Home,它有兩個功能,Display和Save,其中Display生成頁面HTML,Save處理AJAX請求。 – Dimskiy 2011-05-26 16:58:15