2014-10-17 34 views
0

我有一個加載一些自定義dojo小部件的網頁(default.htm)。當整個網址鍵入窗口小部件裝入罰款:自定義dojo小部件在default.htm上不加載

HTTP:/www.eg/default.htm

但是當網站遭受的打擊: HTTP:/www.eg 小部件不負載。

當他們正確加載(指定的default.htm時)控制檯的信息是: XHR加載完成:

GET "http://www.eg/Templates/WatershedMap.htm" 

當他們不加載控制檯的信息是:

OPTIONS http://templates/WatershedMap.htm net::ERR_NAME_NOT_RESOLVED 

我正在運行iis 7.有沒有人有我如何解決這個問題的想法?

感謝

回答

0

我懷疑你dojoConf或數據道場-conf的,使用的是location.pathname,是正確的?或者可能直接在您的xhr請求中加載WatershedMap.htm?

當您使用http; // www.eg/查看該頁面時,location.pathname只是一個斜槓「/」。如果這樣,例如,XHR試圖做到這一點:

xhr(location.pathname + "/Templates/WatershedMap.html")... 

...那麼請求將真正去//Templates/WatershedMap.html

雙斜線表示「protocol relative url」。瀏覽器將採用與當前頁面相同的協議模式(http/https),並在雙斜線後面附加任何內容。

換句話說,這實際上會嘗試向http; //模板發出跨域請求,這會觸發preflight OPTIONS request

但是,當您的網頁加載http; // www.eg/foo/時,location.pathname將爲「/ something/something」,並且請求將轉至http; // www.eg/foo/模板/ WatershedMap.htm。

如果您需要幫助來查明問題,您將不得不再分享一些代碼。查看你的代碼location.pathname,看看你是否找到任何可能相關的東西。

編輯:根據您的意見,您的dojoConf有以下幾點:

packages: [{ 
    name: "Templates", 
    location: location.pathname.replace(/\/[^/]+$/, "") + "/Templates" 
}] 

與替換線()中所花費的當前頁面的路徑(例如/foo/bar.htm)並刪除最後一個斜槓及其後的所有內容,然後追加「/ Templates」。

它應該確保無論何時加載的東西,以「模板」啓動(例如,如果你做dojo/text!Templates/Map.htm,它的外觀在同一個目錄服務器上爲當前頁面。

然而,當你在http; // www.eg/上,路徑名只是一個斜槓,沒有任何東西被刪除,所以你最終得到了「// Templates」,正如前面提到的,這成爲一個協議相對url,模板爲主機名。絕對不是你想要的!另一方面,當你在http; // www.eg/default.htm上時,路徑名是/default.htm,所以所有這些都被剝離了,你只剩下「/模板」。這你想要的!

你可以通過簡單地替換線解決它:

location: location.pathname.replace(/\/[^/]*$/, "") + "/Templates" 

只有一個字符差異(+成爲*)!現在,如果您查看http; // www.eg/,它將刪除單斜槓。

在我看來,最好是使用明確的路徑。如果你知道/模板永遠是http; // www.eg/Templates,你不妨這樣做:

location: "/Templates" 
+0

在dojoConfig我指定的包爲: 包:[{ 名:「模板「,位置:location.pathname.replace(/ \/[^ /] + $ /,」「)+」/ Templates「} ]謝謝 – pvitt 2014-10-17 16:31:28

+0

@pvitt我更新了答案(可能太多的細節, :P),看看是否有幫助。 – Frode 2014-10-17 17:15:55

+0

謝謝。這個竅門 - 我將使用服務器上的位置:「/ Templates」 – pvitt 2014-10-17 17:27:20

相關問題