2011-01-21 53 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