2011-01-21 20 views
3

我正在構建一個Rails(3.0.3)應用程序與一些JavaScript使用jQuery(1.4.4)。在其中一個網站上,我添加了點擊事件監聽器,並希望使用AJAX請求加載一些內容。相對URL沒有得到正確解決由jQuery

$(document).ready(function() { 
    $("a#settings").click(function() { 
    $("div#box").load("settings.js"); 
    return false; 
    }); 
}); 

現在當我打開站點「http://本地主機:3000 /實體/ 3」,其中與結合的點擊收聽鏈接位於並​​點擊我得到一個404錯誤的鏈接。發生這種情況是因爲AJAX請求使用URL「http:// localhost:3000/entities/settings.js」而不是(我會執行的)「http:// localhost:3000/entities/3/settings.js」。

回答

1

有一個答案用的非常相似some但獨立的庫question

這是相對路徑應該是怎樣工作的。

protocol://some.domain.name/dir1/dir2/filename

如果只指定一個新的文件名「富」,你會得到相同的協議,主機和顯示目錄,只有文件名改爲:

protocol://some.domain.name/dir1/dir2/foo

如果指定了整個路徑「/ dir3/filename2」你得到相同的協議和主機名,但與另​​一個路徑:

protocol://some.domain.name/dir3/filename2

您還可以指定主機名「//another.domain.name/dir5/filename3」並獲得相同的協議,但另一臺主機,目錄和文件名:

protocol://another.domain.name/dir5/filename3

什麼可能會造成混亂的是,一個如果指定的url指向一個目錄而不是一個文件,webserver內部可以在url的末尾添加一個/。

​​

如果 「somename」 是目錄的網絡服務器轉換它到

protocol://some.domain.name/somename/

爲了參考,見步驟6中的RFC 1808

0

通過查看的jQuery源代碼,然後$.ajax,我找不到任何試圖解釋相對路徑的東西。它確實從絕對路徑中提取了一些信息,但這只是爲了測試遠程。話雖這麼說,請嘗試以下,看看結果有什麼不同,因爲我可能錯過了一些東西:

$(document).ready(function() { 
    $("#settings").click(function() { 
     var xhr = new XMLHttpRequest(); 
     xhr.open("GET", "settings.js", true); 
     xhr.onreadystatechange = function() { 
      if (xhr.readyState === 4) { 
       $('#box').html(xhr.responseText); 
      } 
     }; 
     xhr.send(null); 
     return false; 
    }); 
}); 

我的猜測是,這可能是一個特定的瀏覽器的問題。

+0

它發生鉻和Firefox根據第4 。我只是嘗試在不同的頁面(也是你的腳本)。它總是試圖連接更高的一條路徑。例如。 localhost/users/kai,然後它嘗試從本地主機/用戶獲取。 URL的最後部分總是被刪除。 – Zardoz 2011-01-21 02:00:47